<?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>127272</bug_id>
          
          <creation_ts>2014-01-20 01:13:43 -0800</creation_ts>
          <short_desc>Need to register CodeBlocks and Executables with the Debugger.</short_desc>
          <delta_ts>2014-01-20 15:48:03 -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>WONTFIX</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>
          
          <blocked>122836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>969761</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-20 01:13:43 -0800</bug_when>
    <thetext>In anticipation of bytecode level breakpoints, we need to register CodeBlocks and Executables with the Debugger.  This is because the Debugger potentially needs to enable / disable breakpoints in the op_debug bytecode of those CodeBlocks.  In order to do this, the Debugger needs be made aware of CodeBlocks it is working with, and this is accomplished via a registration process.  The Debugger also needs to group the registered CodeBlocks by their Executables because it will need this information later for de-opting DFG CodeBlocks when we add DFG support to the Debugger.

The Debugger will keep track of these CodeBlock and Executable registrations using a new ExecutableRegistrar class.

This patch will add this infrastructure to do the registration and unregistration. but will not apply the information towards implementing breakpoints yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969772</commentid>
    <comment_count>1</comment_count>
      <attachid>221636</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-20 02:00:15 -0800</bug_when>
    <thetext>Created attachment 221636
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969773</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-20 02:02:32 -0800</bug_when>
    <thetext>Attachment 221636 did not pass style-queue:


ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:68:  get_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:69:  set_less is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:70:  get_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:71:  set_greater is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:73:  get_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:74:  set_balance_factor is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:76:  compare_key_key is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:77:  compare_key_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/debugger/DebuggerExecutableRegistrar.h:78:  compare_node_node is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/ChangeLog:121:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 10 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969881</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-20 09:23:56 -0800</bug_when>
    <thetext>Why can&apos;t the debugger just use the list of CodeBlocks and Executables already kept by the garbage collector?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969892</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-20 09:43:39 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why can&apos;t the debugger just use the list of CodeBlocks and Executables already kept by the garbage collector?

Because the Debugger requires that the Executable info be sorted in a specific order (specified in DebuggerExecutableRegistrar.h) in order to make breakpoint searches expedient.  Otherwise, every time we enable / disable a new breakpoint in the debugger, we’ll need to iterate through all CodeBlocks to check if the breakpoint falls in them.

We could assume that the number of CodeBlocks in the VM is small enough that we don’t care about this performance difference.

Or we could sort the garbage collector’s list, but that would mean impacting the perf of non-debugger code for debugger functionality that is not normally used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969900</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-20 10:11:21 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Why can&apos;t the debugger just use the list of CodeBlocks and Executables already kept by the garbage collector?
&gt; 
&gt; Because the Debugger requires that the Executable info be sorted in a specific order (specified in DebuggerExecutableRegistrar.h) in order to make breakpoint searches expedient.  Otherwise, every time we enable / disable a new breakpoint in the debugger, we’ll need to iterate through all CodeBlocks to check if the breakpoint falls in them.
&gt; 
&gt; We could assume that the number of CodeBlocks in the VM is small enough that we don’t care about this performance difference.
&gt; 
&gt; Or we could sort the garbage collector’s list, but that would mean impacting the perf of non-debugger code for debugger functionality that is not normally used.

Or, why can&apos;t we sort the Gc&apos;s list only when the debugger is enabled?  Or, just iterate the whole list and hold off on fixing that pert bug until we had evidence that it&apos;s real. 

I think it would be bad if we had two lists for doing exactly the same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969912</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-20 10:41:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Or we could sort the garbage collector’s list, but that would mean impacting the perf of non-debugger code for debugger functionality that is not normally used.
&gt; 
&gt; Or, why can&apos;t we sort the Gc&apos;s list only when the debugger is enabled?

The GC Executable list is a doubly linked list, not good for searching even if sorted.
The GC CodeBlock list is a hash set, not good for sorting.
 
So, we can’t just sort when we need it.

&gt;  Or, just iterate the whole list and hold off on fixing that pert bug until we had evidence that it&apos;s real. 

When I first started work on the bytecode level breakpoints, I thought that a linear walk of all CodeBlocks  may lead to a noticeable pause when first attaching the debugger with already previous defined breakpoints.  But after working with the code thus far, I&apos;ve gained new understanding of how the CodeBlocks get re-generated after the debugger attaches, and I think that the linear walk of all CodeBlocks might be tolerable after all.  I will give it some more thought.

&gt; I think it would be bad if we had two lists for doing exactly the same thing.

This sorted list is an AVLTree that is internal to the debugger only.  I don’t think it’s such a bad thing, but I agree that it’d be good to avoid having a second data structure if the first will suffice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970051</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-20 15:48:03 -0800</bug_when>
    <thetext>We have a change of plans.  Instead of going with bytecode level breakpoints, we&apos;re going with CodeBlock level breakpoints.  This patch is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221636</attachid>
            <date>2014-01-20 02:00:15 -0800</date>
            <delta_ts>2014-01-20 15:47:25 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-127272.patch</filename>
            <type>text/plain</type>
            <size>41109</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMzEyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNC0wMS0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
TmVlZCB0byByZWdpc3RlciBDb2RlQmxvY2tzIGFuZCBFeGVjdXRhYmxlcyB3aXRoIHRoZSBEZWJ1
Z2dlci4KKyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyNzI3Mj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBhbnRpY2lwYXRpb24gb2Yg
Ynl0ZWNvZGUgbGV2ZWwgYnJlYWtwb2ludHMsIHdlIG5lZWQgdG8gcmVnaXN0ZXIKKyAgICAgICAg
Q29kZUJsb2NrcyBhbmQgRXhlY3V0YWJsZXMgd2l0aCB0aGUgRGVidWdnZXIuIFRoaXMgaXMgYmVj
YXVzZSB0aGUKKyAgICAgICAgRGVidWdnZXIgbWF5IG5lZWQgdG8gZW5hYmxlIC8gZGlzYWJsZSBi
cmVha3BvaW50cyBpbiB0aGUgb3BfZGVidWcKKyAgICAgICAgYnl0ZWNvZGUgb2YgdGhvc2UgQ29k
ZUJsb2Nrcy4gSW4gb3JkZXIgdG8gZG8gdGhpcywgdGhlIERlYnVnZ2VyIG5lZWRzCisgICAgICAg
IHRvIGJlIG1hZGUgYXdhcmUgb2YgQ29kZUJsb2NrcyBpdCBpcyB3b3JraW5nIHdpdGgsIGFuZCB0
aGlzIGlzCisgICAgICAgIGFjY29tcGxpc2hlZCB2aWEgYSByZWdpc3RyYXRpb24gcHJvY2Vzcy4g
VGhlIERlYnVnZ2VyIGFsc28gbmVlZHMgdG8KKyAgICAgICAgZ3JvdXAgdGhlIHJlZ2lzdGVyZWQg
Q29kZUJsb2NrcyBieSB0aGVpciBFeGVjdXRhYmxlcyBiZWNhdXNlIGl0IHdpbGwKKyAgICAgICAg
bmVlZCB0aGlzIGluZm9ybWF0aW9uIGxhdGVyIGZvciBkZS1vcHRpbmcgREZHIENvZGVCbG9ja3Mg
d2hlbiB3ZSBhZGQKKyAgICAgICAgREZHIHN1cHBvcnQgdG8gdGhlIERlYnVnZ2VyLgorCisgICAg
ICAgIFRoZSBEZWJ1Z2dlciB3aWxsIGtlZXAgdHJhY2sgb2YgdGhlc2UgQ29kZUJsb2NrIGFuZCBF
eGVjdXRhYmxlCisgICAgICAgIHJlZ2lzdHJhdGlvbnMgdXNpbmcgYSBuZXcgRXhlY3V0YWJsZVJl
Z2lzdHJhciBjbGFzcy4KKworICAgICAgICBUaGlzIHBhdGNoIHdpbGwgYWRkIHRoaXMgaW5mcmFz
dHJ1Y3R1cmUgdG8gZG8gdGhlIHJlZ2lzdHJhdGlvbiBhbmQKKyAgICAgICAgdW5yZWdpc3RyYXRp
b24uIGJ1dCB3aWxsIG5vdCBhcHBseSB0aGUgaW5mb3JtYXRpb24gdG93YXJkcyBpbXBsZW1lbnRp
bmcKKyAgICAgICAgYnJlYWtwb2ludHMgeWV0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNSZWdpc3RlcmVkV2l0aERl
YnVnZ2VyKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpub3RpZnlJc1JlZ2lzdGVyZWRXaXRo
RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGlmeUlzVW5yZWdpc3RlcmVk
V2l0aERlYnVnZ2VyKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6CisgICAgICAg
IChKU0M6OkRlYnVnZ2VyOjp+RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXR0
YWNoKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmRldGFjaCk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjpyZWdpc3RyYXJGb3IpOgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWdpc3Rl
ckNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1bnJlZ2lzdGVyQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVucmVnaXN0ZXJBbGxDb2RlQmxvY2tzSW4pOgor
ICAgICAgICAtIFRob3VnaCBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGN1cnJlbnQgcGF0Y2gsIHRo
ZXNlIDMgZnVuY3Rpb24gd2lsbAorICAgICAgICAgIGxhdGVyIHNlcnZlIGFzIGNob2tlIHBvaW50
cyB0byBhcHBseSBhbmQgdW5hcHBseSBicmVha3BvaW50cyB0aGF0CisgICAgICAgICAgaGF2ZSBh
bHJlYWR5IGJlZW4gc2V0IGluIHRoZSBkZWJ1Z2dlciBidXQgaGF2ZSBub3QgYmVlbiByZXNvbHZl
ZCB0bworICAgICAgICAgIGFjdHVhbCBDbGFzc0Jsb2NrcyB5ZXQuCisKKyAgICAgICAgKiBkZWJ1
Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAtIENoYW5nZWQgdGhlIG1fZ2xvYmFsT2JqZWN0cyBo
YXNoIHNldCB0byBhIG1fanNHbG9iYWxPYmplY3RUb1JlZ2lzdHJhck1hcAorICAgICAgICAgIGhh
c2ggbWFwIGJlY2F1c2Ugd2UgbmVlZCB0byBoYXZlIGEgc2VwYXJhdGUgcmVnaXN0cmFyIHBlciBn
bG9iYWxPYmplY3QuCisgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciBjYW4g
YmUgYXR0YWNoZWQgdG8gbW9yZSB0aGFuIG9uZSBnbG9iYWxPYmplY3QKKyAgICAgICAgICBhbmQg
Y2FuIHRoZW9yZXRpY2FsbHkgYmUgZGV0YWNoZWQgZnJvbSBvbmUsIHdoaWxlIG90aGVycyBhcmUg
c3RpbGwKKyAgICAgICAgICBhdHRhY2hlZC4gSW4gdGhhdCBjYXNlLCB3ZSB3aWxsIHdhbnQgdG8g
Y2xlYXIgYWxsIHRoZSBhcHBsaWVkIGJyZWFrcG9pbnRzCisgICAgICAgICAgZm9yIHRoZSBkZXRh
Y2hlZCBnbG9iYWxPYmplY3QgYnV0IG5vdCBmb3IgdGhlIG9uZXMgdGhhdCBhcmUgc3RpbGwKKyAg
ICAgICAgICBhdHRhY2hlZC4gSGVuY2UsIHdlIG5lZWQgdGhlIHNlcGFyYXRlIHJlZ2lzdHJhcnMg
aW4gb3JkZXIgdG8gZGlzY2VybgorICAgICAgICAgIHdoaWNoIENvZGVCbG9jayBuZWVkcyAiY2xl
YW5pbmciIGFuZCB3aGljaCB0byBsZWF2ZSBhbG9uZS4KKworICAgICAgICAqIGRlYnVnZ2VyL0Rl
YnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlRGVzY3JpcHRvcjo6RXhlY3V0YWJsZURlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQ29kZUJsb2NrU2V0OjpFeGVjdXRhYmxlQ29kZUJsb2NrU2V0KToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZVJlZ2lzdHJhcjo6YWRkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZVJlZ2lzdHJhcjo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVJlZ2lzdHJhcjo6
Y2xlYXIpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlUmVnaXN0cmFyOjpjb2RlQmxvY2tzRm9y
KToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpnZXRfbGVz
cyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpzZXRfbGVz
cyk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpnZXRfZ3Jl
YXRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpzZXRf
Z3JlYXRlcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpn
ZXRfYmFsYW5jZV9mYWN0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlUmVnaXN0cmFyQWJz
dHJhY3Rvcjo6c2V0X2JhbGFuY2VfZmFjdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVJl
Z2lzdHJhckFic3RyYWN0b3I6OmNvbXBhcmVfa2V5X2tleSk6CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yOjpjb21wYXJlX2tleV9ub2RlKToKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZVJlZ2lzdHJhckFic3RyYWN0b3I6OmNvbXBhcmVfbm9kZV9ub2RlKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZVJlZ2lzdHJhckFic3RyYWN0b3I6Om51bGwpOgorICAgICAg
ICAoSlNDOjpFeGVjdXRhYmxlUmVnaXN0cmFyQWJzdHJhY3Rvcjo6Y29tcGFyZSk6CisgICAgICAg
IC0gVGhlIEV4ZWN1dGFibGVSZWdpc3RyYXIgaXMgYW4gQVZMVHJlZSBzb3J0ZWQgYnkgdGhlIHNv
dXJjZSBjb2RlIHJhbmdlCisgICAgICAgICAgb2YgdGhlIEV4ZWN1dGFibGUgYW5kIGFsc28gaXRz
IHNvdXJjZUlELiBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0bworICAgICAgICAgIHNldCBicmVh
a3BvaW50cyAodG8gYmUgaW1wbGVtZW50ZWQgbGF0ZXIpIHdoaWNoIHJlcXVpcmVzIHF1aWNrbHkK
KyAgICAgICAgICBmaW5kaW5nIHRoZSBhcHByb3ByaWF0ZSBDb2RlQmxvY2sgZm9yIHRoZSBsaW5l
IGFuZCBjb2x1bW4gc3BlY2lmaWVkCisgICAgICAgICAgYnkgdGhlIGJyZWFrcG9pbnQuCisKKyAg
ICAgICAgICBUaGUgZGV0YWlscyBvZiB0aGUgQ29kZUJsb2NrIGZpdCBhbGdvcml0aG0gYW5kIGhv
dyBpdCBpbmZsdWVuY2VzIHRoZQorICAgICAgICAgIHdheSB3ZSBzb3J0IHRoZSByZWdpc3RyYXIg
aXMgZG9jdW1lbnRlZCBpbiBhIGNvbW1lbnQgaW4KKyAgICAgICAgICBFeGVjdXRhYmxlUmVnaXN0
cmFyQWJzdHJhY3Rvcjo6Y29tcGFyZSgpLgorCisgICAgICAgICAgTm90ZTogdGhlIG5hbWluZyBj
b252ZW50aW9uIG9mIHRoZSByZWdpc3RyYXIgZnVuY3Rpb25zIGFyZSBub3QKKyAgICAgICAgICBj
b25mb3JtYW50IHRvIFdlYktpdCBTdHlsZSBvbmx5IGJlY2F1c2UgdGhlIGN1cnJlbnQgV1RGOjpB
VkxUcmVlCisgICAgICAgICAgaW1wbGVtZW50YXRpb24gZXhwZWN0cyB0aGVzZSBmdW5jdGlvbiBu
YW1lcy4KKworICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OkNvZGVCbG9ja1JlZlB0cjxUPjo6Q29kZUJsb2NrUmVmUHRyKToK
KyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVmUHRyPFQ+Ojp+Q29k
ZUJsb2NrUmVmUHRyKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2Nr
UmVmUHRyPFQ+OjpjbGVhcik6CisgICAgICAgIChKU0M6Oj0pOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjpDb2RlQmxvY2tSZWZQdHI8VD46OnJlZ2lzdGVyV2l0aERlYnVnZ2VyKToK
KyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVmUHRyPFQ+Ojp1bnJl
Z2lzdGVyRnJvbURlYnVnZ2VyKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAg
IChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6On5TY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpT
Qzo6U2NyaXB0RXhlY3V0YWJsZTo6aXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKToKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bm90aWZ5SXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKToK
KyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bm90aWZ5SXNVbnJlZ2lzdGVyZWRXaXRo
RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpDb2RlQmxvY2tSZWZQ
dHI6OkNvZGVCbG9ja1JlZlB0cik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OkNv
ZGVCbG9ja1JlZlB0cjo6Z2V0KToKKyAgICAgICAgLSBXaGVuIGEgZGVidWdnZXIgaXMgYXR0YWNo
ZWQsIGFsbCB0aGUgcmVsZXZhbnQgQ29kZUJsb2NrcyB3aWxsIGJlCisgICAgICAgICAgZmx1c2hl
ZC4gTmV3IENvZGVCbG9ja3Mgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgbmVjZXNzYXJ5Cisg
ICAgICAgICAgZGVidWdnZXIgc3VwcG9ydC4gVGhlIG1vbWVudCB0aGVzZSBuZXcgQ29kZUJsb2Nr
cyBnZXQgYXNzb2NpYXRlZAorICAgICAgICAgIHdpdGggdGhlaXIgRXhlY3V0YWJsZXMgaXMgd2hl
biB0aGV5IGNvbWUgaW50byB1c2UsIGFuZCBoZW5jZSBpcworICAgICAgICAgIHdoZW4gd2UgbmVl
ZCB0byByZWdpc3RlciB0aGVtIHdpdGggdGhlIGRlYnVnZ2VyLiBTaW1pbGFybHksIGlmIHRoZXkK
KyAgICAgICAgICBnZXQgdGhyb3duIG91dCBhbmQgcmVjb21waWxlZCwgd2UgbmVlZCB0byB1bnJl
Z2lzdGVyIHRoZW0uCisKKyAgICAgICAgICBBIGNvbnZlbmllbnQgd2F5IHRvIGVuc3VyZSB0aGF0
IHdlIGdldCB0aGlzIHJlZ2lzdHJhdGlvbiBhbmQKKyAgICAgICAgICB1bnJlZ2lzdHJhdGlvbiBy
aWdodCBpcyBieSB1c2luZyBhIGN1c3RvbSBDb2RlQmxvY2tSZWZQdHIgKGluc3RlYWQKKyAgICAg
ICAgICBvZiBhIG5vcm1hbCBSZWZQdHIpIHRvIG1hbmFnZSB0aGUgQ29kZUJsb2NrIHBvaW50ZXJz
IGluIHRoZSBFeGVjdXRhYmxlcy4KKyAgICAgICAgICBUaGUgQ29kZUJsb2NrUmVmUHRyIHdpbGwg
ZW5zdXJlIHRoYXQgdGhlIG5lZWRlZCByZWdpc3RyYXRpb24gYW5kCisgICAgICAgICAgdW5yZWdp
c3RyYXRpb24gZ2V0cyBkb25lIGF0IGFsbCB0aGUgcmlnaHQgdGltZXMuCisJCisgICAgICAgICAg
VGhlIENvZGVCbG9ja1JlZlB0ciBpcyBpbXBsZW1lbnRlZCBhcyBhIHN1Yi1jbGFzcyBvZiBSZWZQ
dHIsIGFuZAorICAgICAgICAgIG9ubHkgYWRkcyB0aGUgcmVnaXN0cmF0aW9uIC8gdW5yZWdpc3Ry
YXRpb24gZnVuY3Rpb25hbGl0eS4KKwogMjAxNC0wMS0xOCAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29kZUJsb2NrOiBTaXplIG1fY2FsbExpbmtJbmZvcyBh
bmQgbV9ieVZhbEluZm9zIHRvIGZpdCBlYXJsaWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYyMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGVidWdnZXIvRGVidWdnZXIuY3BwCiAgICAgZGVidWdn
ZXIvRGVidWdnZXJBY3RpdmF0aW9uLmNwcAogICAgIGRlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAorICAgIGRlYnVnZ2VyL0RlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhci5jcHAKIAogICAg
IGRmZy9ERkdBYnN0cmFjdEhlYXAuY3BwCiAgICAgZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24g
MTYyMzAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTU5MSw2ICs1OTEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJBY3RpdmF0aW9uLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJFeGVjdXRhYmxlUmVnaXN0
cmFyLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyRXhlY3V0
YWJsZVJlZ2lzdHJhci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyUHJpbWl0aXZlcy5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTYyMzAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckFjdGl2YXRpb24uY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJDYWxsRnJhbWUuY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJFeGVjdXRh
YmxlUmVnaXN0cmFyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
YnN0cmFjdEhlYXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fi
c3RyYWN0VmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIiAvPgpAQCAtODQ4LDYgKzg0OSw3IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJBY3RpdmF0aW9uLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxGcmFtZS5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJFeGVjdXRhYmxl
UmVnaXN0cmFyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1
Z2dlclByaW1pdGl2ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
YnN0cmFjdEhlYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0
cmFjdEludGVycHJldGVyLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxNjIzMDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsOSBAQAogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJDYWxsRnJhbWUuY3BwIj4KICAgICAgIDxG
aWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhci5jcHAiPgor
ICAgICAgPEZpbHRlcj5kZWJ1Z2dlcjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERpc2Fzc2VtYmxlci5jcHAiPgogICAg
ICAgPEZpbHRlcj5kaXNhc3NlbWJsZXI8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE1
ODYsNiArMTU4OSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1
Z2dlckNhbGxGcmFtZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2Vy
RXhlY3V0YWJsZVJlZ2lzdHJhci5oIj4KKyAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4K
KyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERl
YnVnZ2VyUHJpbWl0aXZlcy5oIj4KICAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KICAg
ICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNjIzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMxMyw2ICsxMzEzLDggQEAK
IAkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuY3BwICovOyB9OwogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAg
LyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTM3REQ1NjE4M0MxRTg4
MDAxOEIyRjAgLyogTGluZUNvbHVtbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzdERDU1MTgzQzFFODgwMDE4QjJGMCAvKiBMaW5lQ29sdW1u
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUZFM0EyOEJBMTg1Njk4NzYwMENDRUNCQSAvKiBEZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzQTI4
QjgxODU2OTg3NjAwQ0NFQ0JBIC8qIERlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhci5jcHAgKi87
IH07CisJCUZFM0EyOEJCMTg1Njk4NzYwMENDRUNCQSAvKiBEZWJ1Z2dlckV4ZWN1dGFibGVSZWdp
c3RyYXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
M0EyOEI5MTg1Njk4NzYwMENDRUNCQSAvKiBEZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTRBMzMx
RjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVD
Q0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3Bw
ICovOyB9OwpAQCAtMjcyMyw2ICsyNzI1LDggQEAKIAkJRkUyMENFOUIxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TExJbnRDTG9vcC5jcHA7IHBhdGggPSBsbGludC9MTEludENMb29wLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0g
bGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTM3REQ1
NTE4M0MxRTg4MDAxOEIyRjAgLyogTGluZUNvbHVtbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGluZUNvbHVtbkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRkUzQTI4QjgxODU2OTg3NjAwQ0NFQ0JBIC8qIERlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lz
dHJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWJ1Z2dlckV4
ZWN1dGFibGVSZWdpc3RyYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTNB
MjhCOTE4NTY5ODc2MDBDQ0VDQkEgLyogRGVidWdnZXJFeGVjdXRhYmxlUmVnaXN0cmFyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJh
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0
RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMx
RTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkU1OTMyQTUxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUVudHJ5U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzM2Myw2ICszMzY3LDggQEAKIAkJMTQ4MERCOUEwRERDMjIzMTAw
M0NGREYyIC8qIGRlYnVnZ2VyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlGRTNBMjhCODE4NTY5ODc2MDBDQ0VDQkEgLyogRGVidWdnZXJFeGVjdXRhYmxl
UmVnaXN0cmFyLmNwcCAqLywKKwkJCQlGRTNBMjhCOTE4NTY5ODc2MDBDQ0VDQkEgLyogRGVidWdn
ZXJFeGVjdXRhYmxlUmVnaXN0cmFyLmggKi8sCiAJCQkJRkVBMDg2MUUxODJCN0EwNDAwRjZEODUx
IC8qIEJyZWFrcG9pbnQuaCAqLywKIAkJCQlGRUEwODYxRjE4MkI3QTA0MDBGNkQ4NTEgLyogRGVi
dWdnZXJQcmltaXRpdmVzLmggKi8sCiAJCQkJRjY5MkE4NTgwMjU1NTk3RDAxRkY2MEY3IC8qIERl
YnVnZ2VyLmNwcCAqLywKQEAgLTQ0NjAsNiArNDQ2Niw3IEBACiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUNFRUUx
NTE4N0YzQkFEMDBFNTVDOTkgLyogSW5zcGVjdG9yQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCUZFM0EyOEJCMTg1Njk4NzYwMENDRUNCQSAvKiBEZWJ1Z2dlckV4ZWN1dGFibGVSZWdp
c3RyYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBD
b3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTRFQzkwQzE4NjBENkMyMDA5
NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU5MzJB
ODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLywKQEAgLTU4
NTAsNiArNTg1Nyw3IEBACiAJCQkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8qIEpJVFN0dWJS
b3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QTIzRDc1MEY0RTFBQkIwMDIzQ0RB
RCAvKiBKSVRTdHVicy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVFRjkxRTE2ODc4RjdBMDAz
RTVDMjUgLyogSklUVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUZFM0EyOEJBMTg1Njk4
NzYwMENDRUNCQSAvKiBEZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDNzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MEI3RDFEMERDNjlBRjcw
MDlDNDJCOCAvKiBKU0FjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2QzQx
MDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE2MjMwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDc2LDYgKzE0NzYsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX2FjdGl2YXRpb25SZWdpc3Rlcihv
dGhlci5tX2FjdGl2YXRpb25SZWdpc3RlcikKICAgICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1f
aXNTdHJpY3RNb2RlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24ob3RoZXIubV9uZWVkc0FjdGl2
YXRpb24pCisgICAgLCBtX2lzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcihmYWxzZSkKICAgICAsIG1f
c291cmNlKG90aGVyLm1fc291cmNlKQogICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIubV9zb3Vy
Y2VPZmZzZXQpCiAgICAgLCBtX2ZpcnN0TGluZUNvbHVtbk9mZnNldChvdGhlci5tX2ZpcnN0TGlu
ZUNvbHVtbk9mZnNldCkKQEAgLTE1MjksNiArMTUzMCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKHVubGlua2Vk
Q29kZUJsb2NrLT5hY3RpdmF0aW9uUmVnaXN0ZXIoKSkKICAgICAsIG1faXNTdHJpY3RNb2RlKHVu
bGlua2VkQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkKICAgICAsIG1fbmVlZHNBY3RpdmF0aW9u
KHVubGlua2VkQ29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkgJiYgdW5saW5rZWRDb2Rl
QmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQorICAgICwgbV9pc1JlZ2lzdGVyZWRX
aXRoRGVidWdnZXIoZmFsc2UpCiAgICAgLCBtX3NvdXJjZShzb3VyY2VQcm92aWRlcikKICAgICAs
IG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KGZpcnN0TGluZUNvbHVtbk9mZnNldCkKQEAgLTE4NjUsNiArMTg2Nyw3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2Nr
KCkKIHsKKyAgICBBU1NFUlQoIWlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpKTsKICAgICBpZiAo
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyKQogICAgICAgICBtX3ZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPm5vdGlmeURlc3RydWN0aW9uKHRoaXMpOwogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyMzAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC04NzAsNiArODcwLDEwIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGZyYW1lUmVnaXN0
ZXJDb3VudCgpOwogCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcjsgfQorICAgIHZvaWQgbm90aWZ5SXNS
ZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkgeyBtX2lzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlciA9IHRy
dWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzVW5yZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkgeyBtX2lz
UmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlciA9IGZhbHNlOyB9CisKICAgICAvLyBGSVhNRTogTWFrZSB0
aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgogCiAgICAgaW50IG1fbnVtQ2FsbGVlUmVn
aXN0ZXJzOwpAQCAtMTAxOSw2ICsxMDIzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVlZHNB
Y3RpdmF0aW9uOwogICAgIGJvb2wgbV9tYXlCZUV4ZWN1dGluZzsKICAgICB1aW50OF90IG1fdmlz
aXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOworICAgIGJvb2wgbV9pc1JlZ2lzdGVyZWRXaXRoRGVi
dWdnZXI7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291cmNlOwogICAgIHVuc2ln
bmVkIG1fc291cmNlT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2Vy
L0RlYnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdn
ZXIvRGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNjIzMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKICAqCkBAIC0yNCw3ICsyNCw5IEBACiAKICNpbmNsdWRlICJEZWJ1Z2dl
ci5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRGVidWdnZXJDYWxsRnJh
bWUuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCkBAIC0xNTgsMTYgKzE2MCwxOSBAQCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9v
bCBpc0luV29ya2VyVGhyZWFkCiAKIERlYnVnZ2VyOjp+RGVidWdnZXIoKQogewotICAgIEhhc2hT
ZXQ8SlNHbG9iYWxPYmplY3QqPjo6aXRlcmF0b3IgZW5kID0gbV9nbG9iYWxPYmplY3RzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxKU0dsb2JhbE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fZ2xv
YmFsT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRE
ZWJ1Z2dlcigwKTsKKyAgICBKU0dsb2JhbE9iamVjdFRvUmVnaXN0cmFyTWFwOjppdGVyYXRvciBl
bmQgPSBtX2pzR2xvYmFsT2JqZWN0VG9SZWdpc3RyYXJNYXAuZW5kKCk7CisgICAgSlNHbG9iYWxP
YmplY3RUb1JlZ2lzdHJhck1hcDo6aXRlcmF0b3IgaXQgPSBtX2pzR2xvYmFsT2JqZWN0VG9SZWdp
c3RyYXJNYXAuYmVnaW4oKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IHVucmVnaXN0ZXJBbGxDb2RlQmxvY2tzSW4oKml0LT52YWx1ZSk7CisgICAgICAgIGl0LT5rZXkt
PnNldERlYnVnZ2VyKDApOworICAgIH0KIH0KIAogdm9pZCBEZWJ1Z2dlcjo6YXR0YWNoKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQVNTRVJUKCFnbG9iYWxPYmplY3QtPmRl
YnVnZ2VyKCkpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVidWdnZXIodGhpcyk7Ci0gICAgbV9n
bG9iYWxPYmplY3RzLmFkZChnbG9iYWxPYmplY3QpOworICAgIG1fanNHbG9iYWxPYmplY3RUb1Jl
Z2lzdHJhck1hcC5hZGQoZ2xvYmFsT2JqZWN0LCBzdGQ6Om1ha2VfdW5pcXVlPEV4ZWN1dGFibGVS
ZWdpc3RyYXI+KCkpOwogfQogCiB2b2lkIERlYnVnZ2VyOjpkZXRhY2goSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKQEAgLTE4MSw4ICsxODYsOSBAQCB2b2lkIERlYnVnZ2VyOjpkZXRhY2go
SlNHbG9iYWxPYmplY3QqIGdsCiAgICAgICAgIGNvbnRpbnVlUHJvZ3JhbSgpOwogICAgIH0KIAot
ICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdHMuY29udGFpbnMoZ2xvYmFsT2JqZWN0KSk7Ci0gICAg
bV9nbG9iYWxPYmplY3RzLnJlbW92ZShnbG9iYWxPYmplY3QpOworICAgIEFTU0VSVChtX2pzR2xv
YmFsT2JqZWN0VG9SZWdpc3RyYXJNYXAuY29udGFpbnMoZ2xvYmFsT2JqZWN0KSk7CisgICAgdW5y
ZWdpc3RlckFsbENvZGVCbG9ja3NJbihyZWdpc3RyYXJGb3IoZ2xvYmFsT2JqZWN0KSk7CisgICAg
bV9qc0dsb2JhbE9iamVjdFRvUmVnaXN0cmFyTWFwLnJlbW92ZShnbG9iYWxPYmplY3QpOwogICAg
IGdsb2JhbE9iamVjdC0+c2V0RGVidWdnZXIoMCk7CiB9CiAKQEAgLTE5Miw2ICsxOTgsMzEgQEAg
dm9pZCBEZWJ1Z2dlcjo6c2V0U2hvdWxkUGF1c2UoYm9vbCB2YWx1ZQogICAgIHVwZGF0ZU5lZWRG
b3JPcERlYnVnQ2FsbGJhY2tzKCk7CiB9CiAKK0V4ZWN1dGFibGVSZWdpc3RyYXImIERlYnVnZ2Vy
OjpyZWdpc3RyYXJGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0ds
b2JhbE9iamVjdFRvUmVnaXN0cmFyTWFwOjppdGVyYXRvciBpdCA9CisgICAgICAgIG1fanNHbG9i
YWxPYmplY3RUb1JlZ2lzdHJhck1hcC5maW5kKGdsb2JhbE9iamVjdCk7CisgICAgQVNTRVJUKGl0
ICE9IG1fanNHbG9iYWxPYmplY3RUb1JlZ2lzdHJhck1hcC5lbmQoKSk7CisgICAgcmV0dXJuICpp
dC0+dmFsdWU7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIEV4ZWN1dGFibGVSZWdpc3RyYXImIHJlZ2lzdHJhciA9IHJl
Z2lzdHJhckZvcihjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKKyAgICByZWdpc3RyYXIuYWRk
KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jayk7Cit9CisKK3ZvaWQgRGVi
dWdnZXI6OnVucmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
RXhlY3V0YWJsZVJlZ2lzdHJhciYgcmVnaXN0cmFyID0gcmVnaXN0cmFyRm9yKGNvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpOworICAgIHJlZ2lzdHJhci5yZW1vdmUoY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgY29kZUJsb2NrKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6dW5yZWdpc3RlckFs
bENvZGVCbG9ja3NJbihFeGVjdXRhYmxlUmVnaXN0cmFyJiByZWdpc3RyYXIpCit7CisgICAgcmVn
aXN0cmFyLmNsZWFyKCk7Cit9CisKIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKFZNKiB2bSkKIHsKICAgICAvLyBJZiBKYXZhU2NyaXB0IGlzIHJ1bm5pbmcsIGl0J3Mgbm90
IHNhZmUgdG8gcmVjb21waWxlLCBzaW5jZSB3ZSdsbCBlbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lvbiAxNjIzMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlICJCcmVha3BvaW50LmgiCiAjaW5jbHVkZSAi
RGVidWdnZXJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3Ry
YXIuaCIKICNpbmNsdWRlICJEZWJ1Z2dlclByaW1pdGl2ZXMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDYgKzM2LDcgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CitjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBK
U0dsb2JhbE9iamVjdDsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwogY2xhc3MgVk07CkBAIC0xMDQs
NiArMTA2LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhW
TSopOwogCisgICAgdm9pZCByZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEJyZWFrcG9p
bnQmKSB7IH0KQEAgLTE0Niw2ICsxNTEsOSBAQCBwcml2YXRlOgogICAgICAgICBEZWJ1Z2dlciYg
bV9kZWJ1Z2dlcjsKICAgICB9OwogCisgICAgRXhlY3V0YWJsZVJlZ2lzdHJhciYgcmVnaXN0cmFy
Rm9yKEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCB1bnJlZ2lzdGVyQWxsQ29kZUJsb2Nrc0lu
KEV4ZWN1dGFibGVSZWdpc3RyYXImKTsKKwogICAgIGJvb2wgaGFzQnJlYWtwb2ludChTb3VyY2VJ
RCwgY29uc3QgVGV4dFBvc2l0aW9uJiwgQnJlYWtwb2ludCogaGl0QnJlYWtwb2ludCk7CiAKICAg
ICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQpAQCAt
MTYxLDcgKzE2OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAgICAgdm9pZCBwYXVzZUlmTmVlZGVkKEpTQzo6
Q2FsbEZyYW1lKik7CiAKLSAgICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmpl
Y3RzOworICAgIHR5cGVkZWYgSGFzaE1hcDxKU0dsb2JhbE9iamVjdCosIHN0ZDo6dW5pcXVlX3B0
cjxFeGVjdXRhYmxlUmVnaXN0cmFyPj4gSlNHbG9iYWxPYmplY3RUb1JlZ2lzdHJhck1hcDsKKyAg
ICBKU0dsb2JhbE9iamVjdFRvUmVnaXN0cmFyTWFwIG1fanNHbG9iYWxPYmplY3RUb1JlZ2lzdHJh
ck1hcDsKIAogICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0
YXRlOwogICAgIGJvb2wgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA6IDE7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJFeGVjdXRhYmxlUmVnaXN0cmFyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJFeGVj
dXRhYmxlUmVnaXN0cmFyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZWJ1Z2dlci9EZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlckV4ZWN1dGFi
bGVSZWdpc3RyYXIuaCIKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisjaW5j
bHVkZSAiQnJlYWtwb2ludC5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKworaW5saW5lIEV4ZWN1dGFibGVEZXNjcmlwdG9yOjpFeGVjdXRhYmxlRGVzY3JpcHRv
cihTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlKQorICAgIDogc291cmNlSUQoZXhlY3V0YWJs
ZS0+c291cmNlSUQoKSkKKyAgICAsIHN0YXJ0TGluZShleGVjdXRhYmxlLT5saW5lTm8oKSkKKyAg
ICAsIHN0YXJ0Q29sdW1uKGV4ZWN1dGFibGUtPnN0YXJ0Q29sdW1uKCkpCisgICAgLCBlbmRMaW5l
KGV4ZWN1dGFibGUtPmxhc3RMaW5lKCkpCisgICAgLCBlbmRDb2x1bW4oZXhlY3V0YWJsZS0+ZW5k
Q29sdW1uKCkpCit7Cit9CisKK2lubGluZSBFeGVjdXRhYmxlQ29kZUJsb2NrU2V0OjpFeGVjdXRh
YmxlQ29kZUJsb2NrU2V0KFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCisgICAgOiBrZXko
ZXhlY3V0YWJsZSkKKyAgICAsIGV4ZWN1dGFibGUoZXhlY3V0YWJsZSkKK3sKKyAgICAvLyBUaGUg
ZmllbGRzIGxlc3MsIGdyZWF0ZXIgYW5kIGJhbGFuY2VGYWN0b3Igd2lsbCBiZSBzZXQgYnkgdGhl
IEFWTFRyZWUKKyAgICAvLyBpbXBsZW1lbnRhdGlvbiB3aGVuIHdlIGluc2VydCB0aGlzIEV4ZWN1
dGFibGVDb2RlQmxvY2tTZXQuIEhlbmNlLCBubyBuZWVkCisgICAgLy8gdG8gZG8gcmVkdW5kYW50
IGluaXRpYWxpemF0aW9uIG9mIHRob3NlIGZpZWxkcyBoZXJlLgorfQorCisKK3ZvaWQgRXhlY3V0
YWJsZVJlZ2lzdHJhcjo6YWRkKFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIEV4ZWN1dGFibGVDb2RlQmxvY2tTZXQqIHNldDsKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkpIHsKKyAgICAgICAgRXhl
Y3V0YWJsZURlc2NyaXB0b3Iga2V5KGV4ZWN1dGFibGUpOworICAgICAgICBzZXQgPSBzZWFyY2go
a2V5KTsKKyAgICAgICAgQVNTRVJUKHNldC0+ZXhlY3V0YWJsZSA9PSBleGVjdXRhYmxlKTsKKwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA9IG5ldyBFeGVjdXRhYmxlQ29kZUJsb2NrU2V0KGV4
ZWN1dGFibGUpOworICAgICAgICBFeGVjdXRhYmxlQ29kZUJsb2NrU2V0KiBhY3R1YWxTZXQgPSBp
bnNlcnQoc2V0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFjdHVhbFNldCk7CisgICAgICAgIEFT
U0VSVChhY3R1YWxTZXQgPT0gc2V0KTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bm90aWZ5SXNSZWdp
c3RlcmVkV2l0aERlYnVnZ2VyKCk7CisgICAgfQorCisgICAgVmVjdG9yPENvZGVCbG9jayo+JiBj
b2RlQmxvY2tzTGlzdCA9IHNldC0+Y29kZUJsb2Nrc0xpc3Q7CisjaWZuZGVmIE5ERUJVRworICAg
IHVuc2lnbmVkIG51bUNvZGVCbG9ja3MgPSBjb2RlQmxvY2tzTGlzdC5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvZGVCbG9ja3M7IGkrKykKKyAgICAgICAgQVNTRVJU
KGNvZGVCbG9jayAhPSBjb2RlQmxvY2tzTGlzdFtpXSk7CisjZW5kaWYKKyAgICBjb2RlQmxvY2tz
TGlzdC5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICBjb2RlQmxvY2stPm5vdGlmeUlzUmVnaXN0ZXJl
ZFdpdGhEZWJ1Z2dlcigpOworfQorCit2b2lkIEV4ZWN1dGFibGVSZWdpc3RyYXI6OnJlbW92ZShT
Y3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICBBU1NFUlQoZXhlY3V0YWJsZS0+aXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkpOworICAgIEFT
U0VSVChjb2RlQmxvY2stPmlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpKTsKKworICAgIEV4ZWN1
dGFibGVEZXNjcmlwdG9yIGtleShleGVjdXRhYmxlKTsKKyAgICBFeGVjdXRhYmxlQ29kZUJsb2Nr
U2V0KiBzZXQgPSBzZWFyY2goa2V5KTsKKyAgICBBU1NFUlQoc2V0LT5leGVjdXRhYmxlID09IGV4
ZWN1dGFibGUpOworICAgIAorICAgIFZlY3RvcjxDb2RlQmxvY2sqPiYgY29kZUJsb2Nrc0xpc3Qg
PSBzZXQtPmNvZGVCbG9ja3NMaXN0OworICAgIHVuc2lnbmVkIG51bUNvZGVCbG9ja3MgPSBjb2Rl
QmxvY2tzTGlzdC5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvZGVC
bG9ja3M7IGkrKykgeworICAgICAgICBpZiAoY29kZUJsb2NrID09IGNvZGVCbG9ja3NMaXN0W2ld
KSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPm5vdGlmeUlzVW5yZWdpc3RlcmVkV2l0aERlYnVn
Z2VyKCk7CisgICAgICAgICAgICBjb2RlQmxvY2tzTGlzdC5yZW1vdmUoaSk7CisgICAgICAgICAg
ICBpZiAoIWNvZGVCbG9ja3NMaXN0LnNpemUoKSkgeworICAgICAgICAgICAgICAgIEV4ZWN1dGFi
bGVDb2RlQmxvY2tTZXQqIHJlbW92ZWRTZXQgPSBTdXBlcjo6cmVtb3ZlKGtleSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlbW92ZWRTZXQgPT0gc2V0KTsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgcmVtb3ZlZFNldDsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlLT5ub3RpZnlJc1VucmVn
aXN0ZXJlZFdpdGhEZWJ1Z2dlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEV4ZWN1dGFibGVSZWdpc3RyYXI6OmNsZWFy
KCkKK3sKKyAgICBJdGVyYXRvciBpdGVyOworICAgIGl0ZXIuc3RhcnRfaXRlcl9sZWFzdCgqdGhp
cyk7CisgICAgd2hpbGUgKCppdGVyKSB7CisgICAgICAgIEV4ZWN1dGFibGVDb2RlQmxvY2tTZXQq
IHNldCA9ICppdGVyOworICAgICAgICBTdXBlcjo6cmVtb3ZlKHNldC0+a2V5KTsKKworICAgICAg
ICBWZWN0b3I8Q29kZUJsb2NrKj4mIGNvZGVCbG9ja3NMaXN0ID0gc2V0LT5jb2RlQmxvY2tzTGlz
dDsKKyAgICAgICAgdW5zaWduZWQgbnVtQ29kZUJsb2NrcyA9IGNvZGVCbG9ja3NMaXN0LnNpemUo
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUNvZGVCbG9ja3M7IGkrKykK
KyAgICAgICAgICAgIGNvZGVCbG9ja3NMaXN0W2ldLT5ub3RpZnlJc1VucmVnaXN0ZXJlZFdpdGhE
ZWJ1Z2dlcigpOworICAgICAgICBzZXQtPmV4ZWN1dGFibGUtPm5vdGlmeUlzVW5yZWdpc3RlcmVk
V2l0aERlYnVnZ2VyKCk7CisKKyAgICAgICAgZGVsZXRlIHNldDsKKyAgICAgICAgaXRlci5zdGFy
dF9pdGVyX2xlYXN0KCp0aGlzKTsKKyAgICB9Cit9CisKK0V4ZWN1dGFibGVDb2RlQmxvY2tTZXQq
IEV4ZWN1dGFibGVSZWdpc3RyYXI6OmNvZGVCbG9ja3NGb3IoQnJlYWtwb2ludCYgYnJlYWtwb2lu
dCkKK3sKKyAgICBFeGVjdXRhYmxlQ29kZUJsb2NrU2V0KiByZXN1bHQgPSBudWxscHRyOworCisg
ICAgSXRlcmF0b3IgaXRlcjsKKyAgICBpdGVyLnN0YXJ0X2l0ZXJfbGVhc3QoKnRoaXMpOworICAg
IGZvciAoOyAqaXRlciAmJiAhcmVzdWx0OyArK2l0ZXIpIHsKKyAgICAgICAgRXhlY3V0YWJsZURl
c2NyaXB0b3ImIGRlc2MgPSAoKml0ZXIpLT5rZXk7CisgICAgICAgIGlmIChicmVha3BvaW50LnNv
dXJjZUlEICE9IGRlc2Muc291cmNlSUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoYnJlYWtwb2ludC5saW5lIDwgZGVzYy5zdGFydExpbmUgfHwgYnJlYWtwb2ludC5saW5l
ID4gZGVzYy5lbmRMaW5lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJy
ZWFrcG9pbnQubGluZSA9PSBkZXNjLnN0YXJ0TGluZSAmJiBicmVha3BvaW50LmNvbHVtbiA8IGRl
c2Muc3RhcnRDb2x1bW4pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYnJl
YWtwb2ludC5saW5lID09IGRlc2MuZW5kTGluZSAmJiBicmVha3BvaW50LmNvbHVtbiA+PSBkZXNj
LmVuZENvbHVtbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlc3VsdCA9ICgq
aXRlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckV4ZWN1dGFi
bGVSZWdpc3RyYXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAg
KzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckV4ZWN1dGFi
bGVSZWdpc3RyYXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlckV4ZWN1dGFibGVSZWdpc3RyYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERlYnVnZ2VyRXhlY3V0YWJsZVJlZ2lzdHJhcl9oCisjZGVmaW5lIERlYnVnZ2Vy
RXhlY3V0YWJsZVJlZ2lzdHJhcl9oCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
KworI2luY2x1ZGUgIkRlYnVnZ2VyUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGUu
aCIKKyNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBCcmVha3BvaW50OworY2xhc3MgQ29kZUJsb2NrOwor
CitzdHJ1Y3QgRXhlY3V0YWJsZURlc2NyaXB0b3IgeworICAgIGlubGluZSBFeGVjdXRhYmxlRGVz
Y3JpcHRvcihTY3JpcHRFeGVjdXRhYmxlKik7CisKKyAgICBTb3VyY2VJRCBzb3VyY2VJRDsKKyAg
ICB1bnNpZ25lZCBzdGFydExpbmU7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW47CisgICAgdW5z
aWduZWQgZW5kTGluZTsKKyAgICB1bnNpZ25lZCBlbmRDb2x1bW47Cit9OworCitzdHJ1Y3QgRXhl
Y3V0YWJsZUNvZGVCbG9ja1NldCB7CisgICAgaW5saW5lIEV4ZWN1dGFibGVDb2RlQmxvY2tTZXQo
U2NyaXB0RXhlY3V0YWJsZSopOworCisgICAgRXhlY3V0YWJsZURlc2NyaXB0b3Iga2V5OworICAg
IFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CisgICAgVmVjdG9yPENvZGVCbG9jayo+IGNv
ZGVCbG9ja3NMaXN0OworCisgICAgRXhlY3V0YWJsZUNvZGVCbG9ja1NldCogbGVzczsKKyAgICBF
eGVjdXRhYmxlQ29kZUJsb2NrU2V0KiBncmVhdGVyOworICAgIGludCBiYWxhbmNlRmFjdG9yOwor
fTsKKworc3RydWN0IEV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yIHsKKyAgICB0eXBlZGVm
IEV4ZWN1dGFibGVDb2RlQmxvY2tTZXQqIGhhbmRsZTsKKyAgICB0eXBlZGVmIEV4ZWN1dGFibGVE
ZXNjcmlwdG9yIGtleTsKKyAgICB0eXBlZGVmIHNpemVfdCBzaXplOworCisgICAgc3RhdGljIGhh
bmRsZSBnZXRfbGVzcyhoYW5kbGUgaCkgeyByZXR1cm4gaC0+bGVzczsgfQorICAgIHN0YXRpYyB2
b2lkIHNldF9sZXNzKGhhbmRsZSBoLCBoYW5kbGUgbGVzcykgeyBoLT5sZXNzID0gbGVzczsgfQor
ICAgIHN0YXRpYyBoYW5kbGUgZ2V0X2dyZWF0ZXIoaGFuZGxlIGgpIHsgcmV0dXJuIGgtPmdyZWF0
ZXI7IH0KKyAgICBzdGF0aWMgdm9pZCBzZXRfZ3JlYXRlcihoYW5kbGUgaCwgaGFuZGxlIGdyZWF0
ZXIpIHsgaC0+Z3JlYXRlciA9IGdyZWF0ZXI7IH0KKworICAgIHN0YXRpYyBpbnQgZ2V0X2JhbGFu
Y2VfZmFjdG9yKGhhbmRsZSBoKSB7IHJldHVybiBoLT5iYWxhbmNlRmFjdG9yOyB9CisgICAgc3Rh
dGljIHZvaWQgc2V0X2JhbGFuY2VfZmFjdG9yKGhhbmRsZSBoLCBpbnQgZmFjdG9yKSB7IGgtPmJh
bGFuY2VGYWN0b3IgPSBmYWN0b3I7IH0KKworICAgIHN0YXRpYyBpbnQgY29tcGFyZV9rZXlfa2V5
KGNvbnN0IGtleSYga2EsIGNvbnN0IGtleSYga2IpIHsgcmV0dXJuIGNvbXBhcmUoa2EsIGtiKTsg
fQorICAgIHN0YXRpYyBpbnQgY29tcGFyZV9rZXlfbm9kZShjb25zdCBrZXkmIGssIGhhbmRsZSBo
KSB7IHJldHVybiBjb21wYXJlX2tleV9rZXkoaywgaC0+a2V5KTsgfQorICAgIHN0YXRpYyBpbnQg
Y29tcGFyZV9ub2RlX25vZGUoaGFuZGxlIGhhLCBoYW5kbGUgaGIpIHsgcmV0dXJuIGNvbXBhcmVf
a2V5X2tleShoYS0+a2V5LCBoYi0+a2V5KTsgfQorCisgICAgc3RhdGljIGhhbmRsZSBudWxsKCkg
eyByZXR1cm4gbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgY29tcGFyZShj
b25zdCBFeGVjdXRhYmxlRGVzY3JpcHRvciYgczEsIGNvbnN0IEV4ZWN1dGFibGVEZXNjcmlwdG9y
JiBzMikKKyAgICB7CisgICAgICAgIC8vIExhdGVyLCB3ZSB3aWxsIHdhbnQgdG8gc2VhcmNoIGZv
ciB0aGUgZXhlY3V0YWJsZSB3aG9zZSBzb3VyY2UgcmFuZ2UKKyAgICAgICAgLy8gZW52ZWxvcGVz
IGEgYnJlYWtwb2ludCAoYXMgc3BlY2lmaWVkIGJ5IGl0cyBTb3VyY2VJRCwgbGluZSwgYW5kIGNv
bHVtbikuCisgICAgICAgIC8vIFRoYXQgbWVhbnMgd2UnbGwgd2FudCB0byBjaGVjayBleGVjdXRh
YmxlcyBmcm9tIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24KKyAgICAgICAgLy8gc2NvcGUgb3V0IHRv
IHRoZSBvdXRlcm1vc3QgcHJvZ3JhbSBzY29wZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVG8g
ZmFjaWxpdGF0ZSB0aGlzIHNlYXJjaCwgd2Ugd2lzaCB0byBzb3J0IHRoZSBleGVjdXRhYmxlcyBm
cm9tIHRoZQorICAgICAgICAvLyBpbm5lcm1vc3QgdG8gdGhlIG91dGVybW9zdC4gRm9yIGV4YW1w
bGUsIGxldCdzIHNheSB3ZSBoYXZlIGEgc2NyaXB0CisgICAgICAgIC8vIHRoYXQgbG9va3MgbGlr
ZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyAgICAvLyBwcm9ncmFtIEEKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAgZnVuY3Rpb24gQigpIHsKKyAgICAgICAgLy8gICAgICAgIGZ1bmN0
aW9uIEMoKSB7CisgICAgICAgIC8vICAgICAgICB9IC8vIGVuZCBvZiBDCisgICAgICAgIC8vICAg
IH0gLy8gZW5kIG9mIEIKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgZnVuY3Rpb24gRCgpIHsK
KyAgICAgICAgLy8gICAgICAgIGZ1bmN0aW9uIEUoKSB7CisgICAgICAgIC8vICAgICAgICAgICAg
ZnVuY3Rpb24gRigpIHsKKyAgICAgICAgLy8gICAgICAgICAgICB9IC8vIGVuZCBvZiBGCisgICAg
ICAgIC8vICAgICAgICB9IC8vIGVuZCBvZiBFCisgICAgICAgIC8vICAgIH0gLy8gZW5kIG9mIEQK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgLy8gZW5kIG9mIEEKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gSWYgdGhlIGV4ZWN1dGFibGVzIGZvciBhbGwgb2YgdGhlIGFib3ZlIGhhcyBiZWVuIGlu
c2VydGVkIGludG8gdGhlCisgICAgICAgIC8vIEV4ZWN1dGFibGVSZWdpc3RyYXIsIHRoZW4gd2Ug
d2FudCB0aGUgZm9sbG93aW5nIGl0ZXJhdGlvbiAoaW4gaW5jcmVtZW50YWwpCisgICAgICAgIC8v
IG9yZGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgICBDIEIgRiBFIEQgQQorICAgICAgICAv
LworICAgICAgICAvLyBUbyBhY2hpZXZlIHRoaXMsIHdlIGNvbXBhcmUgdGhlIGVuZCBsaW5lcyBh
bmQgY29sdW1ucyBvZiB0aGUgZXhlY3V0YWJsZXMKKyAgICAgICAgLy8gd2hpY2ggYXJlIGFscmVh
ZHkgbnVtZXJpY2FsbHkgaW4gdGhlIG9yZGVyIHdlIHdhbnQgKHNlZSB0aGUgZW5kIHBvc2l0aW9u
cworICAgICAgICAvLyBpbiB0aGUgZXhhbXBsZSBhYm92ZSkuCisKKyAgICAgICAgaWYgKHMxLmVu
ZExpbmUgIT0gczIuZW5kTGluZSkKKyAgICAgICAgICAgIHJldHVybiBzMS5lbmRMaW5lIC0gczIu
ZW5kTGluZTsKKyAgICAgICAgaWYgKHMxLmVuZENvbHVtbiAhPSBzMi5lbmRDb2x1bW4pCisgICAg
ICAgICAgICByZXR1cm4gczEuZW5kQ29sdW1uIC0gczIuZW5kQ29sdW1uOworCisgICAgICAgIC8v
IFdlIGNvbXBhcmUgdGhlIFNvdXJjZUlEcyBsYXN0IGJlY2F1c2UgdGhleSBhcmUgbGVhc3QgbGlr
ZWx5IHRvIGJlCisgICAgICAgIC8vIGRpZmZlcmVudCBhbmQgd2Ugd2FudCB0byBkZXRlY3QgZGlm
ZmVyZW5jZXMgc29vbmVyLgorICAgICAgICByZXR1cm4gczEuc291cmNlSUQgLSBzMi5zb3VyY2VJ
RDsKKyAgICB9Cit9OworCitjbGFzcyBFeGVjdXRhYmxlUmVnaXN0cmFyIDogcHVibGljIFdURjo6
QVZMVHJlZTxFeGVjdXRhYmxlUmVnaXN0cmFyQWJzdHJhY3Rvcj4geworICAgIHR5cGVkZWYgV1RG
OjpBVkxUcmVlPEV4ZWN1dGFibGVSZWdpc3RyYXJBYnN0cmFjdG9yPiBTdXBlcjsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFN1cGVyOjpJdGVyYXRvciBJdGVyYXRvcjsKKworICAgIHZvaWQgYWRkKFNj
cmlwdEV4ZWN1dGFibGUqLCBDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHJlbW92ZShTY3JpcHRFeGVj
dXRhYmxlKiwgQ29kZUJsb2NrKik7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgRXhlY3V0YWJs
ZUNvZGVCbG9ja1NldCogY29kZUJsb2Nrc0ZvcihCcmVha3BvaW50Jik7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorCisj
ZW5kaWYgLy8gRGVidWdnZXJFeGVjdXRhYmxlUmVnaXN0cmFyX2gKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckV4ZWN1dGFibGVSZWdp
c3RyYXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisq
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNjIzMDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTAsNiArOTAsNjAgQEAgSW50cmluc2ljIE5hdGl2ZUV4
ZWN1dGFibGU6OmludHJpbnNpYygpIAogfQogI2VuZGlmCiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgU2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVmUHRyPFQ+OjpDb2RlQmxvY2tS
ZWZQdHIoVCogcHRyKQorICAgIDogUmVmUHRyPFQ+KHB0cikKK3sKKyAgICByZWdpc3RlcldpdGhE
ZWJ1Z2dlcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFNjcmlwdEV4ZWN1
dGFibGU6OkNvZGVCbG9ja1JlZlB0cjxUPjo6fkNvZGVCbG9ja1JlZlB0cigpCit7CisgICAgdW5y
ZWdpc3RlckZyb21EZWJ1Z2dlcigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5l
IHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVmUHRyPFQ+OjpjbGVhcigpCit7Cisg
ICAgdW5yZWdpc3RlckZyb21EZWJ1Z2dlcigpOworICAgIFN1cGVyOjpjbGVhcigpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFNjcmlwdEV4ZWN1dGFibGU6OkNvZGVCbG9ja1Jl
ZlB0cjxUPiYgU2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVmUHRyPFQ+OjpvcGVyYXRvcj0o
VCogcHRyKQoreworICAgIHVucmVnaXN0ZXJGcm9tRGVidWdnZXIoKTsKKyAgICBTdXBlcjo6b3Bl
cmF0b3I9KHB0cik7CisgICAgcmVnaXN0ZXJXaXRoRGVidWdnZXIoKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBTY3JpcHRFeGVjdXRh
YmxlOjpDb2RlQmxvY2tSZWZQdHI8VD46OnJlZ2lzdGVyV2l0aERlYnVnZ2VyKCkKK3sKKyAgICBU
KiBjb2RlQmxvY2sgPSBnZXQoKTsKKyAgICBpZiAoY29kZUJsb2NrKSB7CisgICAgICAgIERlYnVn
Z2VyKiBkZWJ1Z2dlciA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Cisg
ICAgICAgIGlmIChkZWJ1Z2dlcikgeworICAgICAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmlz
UmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpKTsKKyAgICAgICAgICAgIGRlYnVnZ2VyLT5yZWdpc3Rl
ckNvZGVCbG9jayhjb2RlQmxvY2spOworICAgICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+aXNS
ZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkpOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6Q29kZUJsb2NrUmVm
UHRyPFQ+Ojp1bnJlZ2lzdGVyRnJvbURlYnVnZ2VyKCkKK3sKKyAgICBUKiBjb2RlQmxvY2sgPSBn
ZXQoKTsKKyAgICBpZiAoY29kZUJsb2NrICYmIGNvZGVCbG9jay0+aXNSZWdpc3RlcmVkV2l0aERl
YnVnZ2VyKCkpIHsKKyAgICAgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKKyAgICAgICAgZGVidWdnZXItPnVucmVnaXN0ZXJDb2Rl
QmxvY2soY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmlzUmVnaXN0ZXJl
ZFdpdGhEZWJ1Z2dlcigpKTsKKyAgICB9Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVj
dXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpz
X2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkgfTsKIAog
I2lmIEVOQUJMRShKSVQpCkBAIC02MjgsNCArNjgyLDQgQEAgQ29kZUJsb2NrSGFzaCBTY3JpcHRF
eGVjdXRhYmxlOjpoYXNoRm9yKAogICAgIHJldHVybiBDb2RlQmxvY2tIYXNoKHNvdXJjZSgpLCBr
aW5kKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjIzMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxOCw2ICszMTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9z
b3VyY2Uoc291cmNlKQogICAgICAgICAsIG1fZmVhdHVyZXMoaXNJblN0cmljdENvbnRleHQgPyBT
dHJpY3RNb2RlRmVhdHVyZSA6IDApCiAgICAgICAgICwgbV9uZXZlcklubGluZShmYWxzZSkKKyAg
ICAgICAgLCBtX2lzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcihmYWxzZSkKICAgICAgICAgLCBtX3N0
YXJ0Q29sdW1uKFVJTlRfTUFYKQogICAgICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQogICAg
IHsKQEAgLTMyOCwxMSArMzI5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCiAgICAgICAgICwgbV9mZWF0dXJlcyhpc0luU3RyaWN0Q29udGV4dCA/IFN0cmljdE1vZGVG
ZWF0dXJlIDogMCkKICAgICAgICAgLCBtX25ldmVySW5saW5lKGZhbHNlKQorICAgICAgICAsIG1f
aXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKGZhbHNlKQogICAgICAgICAsIG1fc3RhcnRDb2x1bW4o
VUlOVF9NQVgpCiAgICAgICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCiAgICAgewogICAgIH0K
IAorI2lmbmRlZiBOREVCVUcKKyAgICB+U2NyaXB0RXhlY3V0YWJsZSgpCisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpKTsKKyAgICB9CisjZW5kaWYKKwog
I2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICNlbmRp
ZgpAQCAtMzg2LDEwICszOTUsNDAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHJlcGFyZUZv
ckV4ZWN1dGlvbkltcGwoZXhlYywgc2NvcGUsIGtpbmQpOwogICAgIH0KIAorICAgIGJvb2wgaXNS
ZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkgeyByZXR1cm4gbV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdn
ZXI7IH0KKyAgICB2b2lkIG5vdGlmeUlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpIHsgbV9pc1Jl
Z2lzdGVyZWRXaXRoRGVidWdnZXIgPSB0cnVlOyB9CisgICAgdm9pZCBub3RpZnlJc1VucmVnaXN0
ZXJlZFdpdGhEZWJ1Z2dlcigpIHsgbV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXIgPSBmYWxzZTsg
fQorCiBwcml2YXRlOgogICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAKIHByb3RlY3RlZDoK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBDb2RlQmxvY2tSZWZQdHIgOiBwdWJsaWMg
UmVmUHRyPFQ+IHsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIFJlZlB0cjxUPiBTdXBl
cjsKKyAgICBwdWJsaWM6CisgICAgICAgIEFMV0FZU19JTkxJTkUgQ29kZUJsb2NrUmVmUHRyKCkg
OiBSZWZQdHI8VD4oKSB7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSBDb2RlQmxvY2tSZWZQdHIo
VCogcHRyKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB+Q29kZUJsb2NrUmVmUHRyKCk7CisKKyAg
ICAgICAgQUxXQVlTX0lOTElORSBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBTdXBlcjo6Z2V0KCk7
IH0KKworICAgICAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAgICAgQ29kZUJsb2NrUmVmUHRyJiBv
cGVyYXRvcj0oVCopOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29kZUJsb2NrUmVmUHRyKGNv
bnN0IENvZGVCbG9ja1JlZlB0ciYpID0gZGVsZXRlOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBDb2RlQmxvY2tSZWZQdHIoY29uc3QgUmVmUHRyPFU+JikgPSBkZWxldGU7CisgICAgICAg
IENvZGVCbG9ja1JlZlB0cihDb2RlQmxvY2tSZWZQdHImJikgPSBkZWxldGU7CisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IENvZGVCbG9ja1JlZlB0cihSZWZQdHI8VT4mJikgPSBkZWxldGU7
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENvZGVCbG9ja1JlZlB0cihjb25zdCBQYXNz
UmVmUHRyPFU+JikgPSBkZWxldGU7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IENvZGVC
bG9ja1JlZlB0cihQYXNzUmVmPFU+KSA9IGRlbGV0ZTsKKworICAgICAgICBpbmxpbmUgdm9pZCBy
ZWdpc3RlcldpdGhEZWJ1Z2dlcigpOworICAgICAgICBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyRnJv
bURlYnVnZ2VyKCk7CisgICAgfTsKKwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQog
ICAgIHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpAQCAtNDA1LDYgKzQ0NCw3
IEBAIHByb3RlY3RlZDoKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKICAgICBib29sIG1f
aGFzQ2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgYm9vbCBtX25ldmVySW5saW5lOworICAgIGJvb2wg
bV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXI7CiAgICAgaW50IG1fZmlyc3RMaW5lOwogICAgIGlu
dCBtX2xhc3RMaW5lOwogICAgIHVuc2lnbmVkIG1fc3RhcnRDb2x1bW47CkBAIC00NTMsOCArNDkz
LDggQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAotICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxv
Y2s7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2
YWxDb2RlQmxvY2s7CisgICAgQ29kZUJsb2NrUmVmUHRyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENv
ZGVCbG9jazsKIH07CiAKIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4
ZWN1dGFibGUgewpAQCAtNTA5LDcgKzU0OSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVy
PFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7Ci0g
ICAgUmVmUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKKyAgICBDb2Rl
QmxvY2tSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9wcm9ncmFtQ29kZUJsb2NrOwogfTsKIAog
Y2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAt
NjI3LDggKzY2Nyw4IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6
U3RydWN0dXJlRmxhZ3M7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+
IG1fY29kZUJsb2NrRm9yQ2FsbDsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0OworICAgIENvZGVCbG9ja1JlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gbV9jb2RlQmxvY2tGb3JDYWxsOworICAgIENvZGVCbG9ja1JlZlB0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgYm9vbCBtX2JvZHlJbmNsdWRlc0Jy
YWNlczsKIH07CiAK
</data>
<flag name="review"
          id="245589"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>