<?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>175471</bug_id>
          
          <creation_ts>2017-08-10 20:14:35 -0700</creation_ts>
          <short_desc>Add in-memory encoder/decoders to WTF</short_desc>
          <delta_ts>2017-12-06 03:30:35 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=174541</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>buildbot</cc>
    
    <cc>olivier</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1337814</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-10 20:14:35 -0700</bug_when>
    <thetext>Add in-memory encoder/decoders to WTF

I&apos;ll be needing these in WebCore soon, and there&apos;s probably other ways we can reuse them going forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337820</commentid>
    <comment_count>1</comment_count>
      <attachid>317911</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-10 20:38:11 -0700</bug_when>
    <thetext>Created attachment 317911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337821</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-10 20:39:39 -0700</bug_when>
    <thetext>Attachment 317911 did not pass style-queue:


ERROR: Source/WTF/wtf/CMakeLists.txt:278:  No trailing spaces  [whitespace/trailing] [5]
ERROR: Source/WTF/ChangeLog:11:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 2 in 13 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>1337825</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-10 21:06:28 -0700</bug_when>
    <thetext>What are they going to be used for in WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337828</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-10 21:41:10 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; What are they going to be used for in WebCore?

ServiceWorker stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337829</commentid>
    <comment_count>5</comment_count>
      <attachid>317915</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-10 21:44:46 -0700</bug_when>
    <thetext>Created attachment 317915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337865</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-11 05:03:07 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #4)
&gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; What are they going to be used for in WebCore?
&gt; 
&gt; ServiceWorker stuff.

I gathered. But why specifically will the coders be needed in WebCore? Are they for IPC? If so, why not follow the existing pattern of putting the coders in WebKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1337994</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-11 13:49:56 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #6)
&gt; (In reply to Brady Eidson from comment #4)
&gt; &gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; &gt; What are they going to be used for in WebCore?
&gt; &gt; 
&gt; &gt; ServiceWorker stuff.
&gt; 
&gt; I gathered. But why specifically will the coders be needed in WebCore? Are
&gt; they for IPC? If so, why not follow the existing pattern of putting the
&gt; coders in WebKit?

I don&apos;t need the convenience of autogeneration, IPC message names and targets, etc., and by keeping everything under WebCore implementation will be lower friction and faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338053</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-11 16:35:17 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #7)
&gt; (In reply to Sam Weinig from comment #6)
&gt; &gt; (In reply to Brady Eidson from comment #4)
&gt; &gt; &gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; &gt; &gt; What are they going to be used for in WebCore?
&gt; &gt; &gt; 
&gt; &gt; &gt; ServiceWorker stuff.
&gt; &gt; 
&gt; &gt; I gathered. But why specifically will the coders be needed in WebCore? Are
&gt; &gt; they for IPC? If so, why not follow the existing pattern of putting the
&gt; &gt; coders in WebKit?
&gt; 
&gt; I don&apos;t need the convenience of autogeneration, IPC message names and
&gt; targets, etc., and by keeping everything under WebCore implementation will
&gt; be lower friction and faster.

So it&apos;s not for IPC? What&apos;s it for then? Sorry for being slow here, just don&apos;t quite get it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338120</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-11 22:42:16 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #8)
&gt; (In reply to Brady Eidson from comment #7)
&gt; &gt; (In reply to Sam Weinig from comment #6)
&gt; &gt; &gt; (In reply to Brady Eidson from comment #4)
&gt; &gt; &gt; &gt; (In reply to Sam Weinig from comment #3)
&gt; &gt; &gt; &gt; &gt; What are they going to be used for in WebCore?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; ServiceWorker stuff.
&gt; &gt; &gt; 
&gt; &gt; &gt; I gathered. But why specifically will the coders be needed in WebCore? Are
&gt; &gt; &gt; they for IPC? If so, why not follow the existing pattern of putting the
&gt; &gt; &gt; coders in WebKit?
&gt; &gt; 
&gt; &gt; I don&apos;t need the convenience of autogeneration, IPC message names and
&gt; &gt; targets, etc., and by keeping everything under WebCore implementation will
&gt; &gt; be lower friction and faster.
&gt; 
&gt; So it&apos;s not for IPC? What&apos;s it for then? Sorry for being slow here, just
&gt; don&apos;t quite get it.

It is for IPC. And it is for avoiding having to go up into WebKit and having to rebuild it each time I make a change that should be localized within WebCore.

I am writing patches with small changes in WebCore alone that result in a sub-minute build-link time of WebCore itself.

By relying on &quot;the way things have been&quot; with WebKit2 being the sole arbiter of encoding, my build time skyrockets by having to regenerate messages, rebuild using templated encoders from WebKit2, occasionally rebuild the entire WebKit2 world, stub out new methods, fix link errors, etc etc.

Changes that should be rapid to develop instead slow me down. Significantly.

I can structure significant amounts of code that rely on a single, never-changing message and encoder/decoder pair inside WebKit2, where the meat of the payload can change as needed by solely being encoded/decoded inside WebCore.

This patch is about significantly reducing unnecessary friction in development, and also results in code all being localized to one project instead of spread out over two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338266</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-13 18:30:55 -0700</bug_when>
    <thetext>The alternate coding idiom, that requires less multiframework hopping, that&apos;s been used in the past is to add templatizd encode/decode functions to the classes/structs you want participate in coding. For instance, RealtimeMediaSourceSettings uses:

    template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
    template&lt;class Decoder&gt; static bool decode(Decoder&amp;, RealtimeMediaSourceSettings&amp;);

Then, when IPC does happen, whatever message wants to code these can do so without the help of WebCoreArgumentCoders.

The downside of course is that you need to declare them in the header.

I hope either of these alternate strategies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338345</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-08-14 09:02:35 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #10)
&gt; The alternate coding idiom, that requires less multiframework hopping,
&gt; that&apos;s been used in the past is to add templatizd encode/decode functions to
&gt; the classes/structs you want participate in coding. For instance,
&gt; RealtimeMediaSourceSettings uses:
&gt; 
&gt;     template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
&gt;     template&lt;class Decoder&gt; static bool decode(Decoder&amp;,
&gt; RealtimeMediaSourceSettings&amp;);
&gt; 
&gt; Then, when IPC does happen, whatever message wants to code these can do so
&gt; without the help of WebCoreArgumentCoders.

I&apos;m an extreme champion of this technique. I&apos;m intimately familiar with it. If you look at IDB, for example, you&apos;ll notice extensive use is made of it there. I&apos;ve also added it to tons of PAL classes, have moved many WebCoreArgumentCoders from WK to WC, and have converted many other engineers on the project to it.

I know about it.
 
&gt; The downside of course is that you need to declare them in the header.

*AND* go rebuild WK2 after you&apos;ve made the WebCore change.

&gt; I hope either of these alternate strategies.

AFAIK, you just presented one alternate strategy, not two.

---

Are you r-&apos;ing this patch based on your feedback that there is an existing way to do things, albeit much slower to rapidly develop with?

I would like to move on with development of the actual feature one way or the other.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338589</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-14 19:18:00 -0700</bug_when>
    <thetext>(In reply to Brady Eidson from comment #11)
&gt; (In reply to Sam Weinig from comment #10)
&gt; &gt; I hope either of these alternate strategies.
&gt; 
&gt; AFAIK, you just presented one alternate strategy, not two.
&gt; 

Indeed. One. I thought I had mentioned using WebCore argument coders in WebKit as well, but it seems I didn&apos;t. Sorry for the confusion.

&gt; ---
&gt; 
&gt; Are you r-&apos;ing this patch based on your feedback that there is an existing
&gt; way to do things, albeit much slower to rapidly develop with?
&gt; 
&gt; I would like to move on with development of the actual feature one way or
&gt; the other.

I don&apos;t think it is a good tradeoff to have another set of encoders/decoders and an additional memory allocation / copy for IPC. So, I guess, r-.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317911</attachid>
            <date>2017-08-10 20:38:11 -0700</date>
            <delta_ts>2017-08-10 21:44:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48509</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggODdkNjdlZTY2ZGQuLjRiY2ViYTY2NjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY1IEBACiAyMDE3
LTA4LTEwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQg
aW4tbWVtb3J5IGVuY29kZXIvZGVjb2RlcnMgdG8gV1RGLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29weSB0aGUgUGVyc2lzdGVudENvZGVycyBhbmQg
cmVtb3ZlIGFsbCBvZiB0aGUgU0hBMS9jaGVja3N1bSBjb2RlLCBtYWtpbmcgaW4tbWVtb3J5IGNv
ZGVycy4KKyAgICAgICAgCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAgICAgICAgCisgICAgICAgICogd3RmL21lbW9y
eS9Db2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29kZXI6OmVuY29kZSk6CisgICAgICAg
IChXVEY6OkNvZGVyOjpkZWNvZGUpOgorCisgICAgICAgICogd3RmL21lbW9yeS9Db2RlcnMuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2RlKToKKyAg
ICAgICAgKFdURjo6Q29kZXI8QXRvbWljU3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKFdURjo6
Q29kZXI8Q1N0cmluZz46OmVuY29kZSk6CisgICAgICAgIChXVEY6OkNvZGVyPENTdHJpbmc+Ojpk
ZWNvZGUpOgorICAgICAgICAoV1RGOjpDb2RlcjxTdHJpbmc+OjplbmNvZGUpOgorICAgICAgICAo
V1RGOjpkZWNvZGVTdHJpbmdUZXh0KToKKyAgICAgICAgKFdURjo6Q29kZXI8U3RyaW5nPjo6ZGVj
b2RlKToKKyAgICAgICAgKiB3dGYvbWVtb3J5L0NvZGVycy5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmVuY29kZSk6CisgICAgICAgIChXVEY6OkNvZGVy
PHN0ZDo6b3B0aW9uYWw8VD4+OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpDb2RlcjxzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50Pjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6
Q29kZXI8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludD46OmRlY29kZSk6Cisg
ICAgICAgIChXVEY6OkNvZGVyPFNlY29uZHM+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpDb2Rl
cjxTZWNvbmRzPjo6ZGVjb2RlKToKKworICAgICAgICAqIHd0Zi9tZW1vcnkvRGVjb2Rlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV1RGOjpEZWNvZGVyOjpEZWNvZGVyKToKKyAgICAgICAgKFdURjo6
RGVjb2Rlcjo6fkRlY29kZXIpOgorICAgICAgICAoV1RGOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdl
RW5vdWdoVG9Db250YWluIGNvbnN0KToKKyAgICAgICAgKFdURjo6RGVjb2Rlcjo6ZGVjb2RlRml4
ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdURjo6RGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKToKKyAg
ICAgICAgKFdURjo6RGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiB3dGYvbWVtb3J5L0RlY29k
ZXIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlY29kZXI6Omxlbmd0aCBjb25zdCk6CisgICAg
ICAgIChXVEY6OkRlY29kZXI6OmN1cnJlbnRPZmZzZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpE
ZWNvZGVyOjpkZWNvZGVFbnVtKToKKyAgICAgICAgKFdURjo6RGVjb2Rlcjo6ZGVjb2RlKToKKyAg
ICAgICAgKFdURjo6RGVjb2Rlcjo6YnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbiBjb25zdCk6
CisKKyAgICAgICAgKiB3dGYvbWVtb3J5L0VuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChXVEY6OkVuY29kZXI6On5FbmNvZGVyKToK
KyAgICAgICAgKFdURjo6RW5jb2Rlcjo6Z3Jvdyk6CisgICAgICAgIChXVEY6OkVuY29kZXI6OmVu
Y29kZUZpeGVkTGVuZ3RoRGF0YSk6CisgICAgICAgIChXVEY6OkVuY29kZXI6OmVuY29kZU51bWJl
cik6CisgICAgICAgIChXVEY6OkVuY29kZXI6OmVuY29kZSk6CisgICAgICAgICogd3RmL21lbW9y
eS9FbmNvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpFbmNvZGVyOjplbmNvZGVFbnVtKToK
KyAgICAgICAgKFdURjo6RW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6RW5jb2Rlcjo6
b3BlcmF0b3I8PCk6CisgICAgICAgIChXVEY6OkVuY29kZXI6OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXVEY6OkVuY29kZXI6OmJ1ZmZlclNpemUgY29uc3QpOgorCisyMDE3LTA4LTEwICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwogICAgICAgICBSZW5hbWUgdGhlIHNvdXJj
ZSBmaWxlcyBmb3IgdGhlIFdURiBwZXJzaXN0ZW50IGNvZGVycy4KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTQ0MQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNmViMDA4NzYwOS4uNDQ1MDFlOWM5Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjYsNiArNjYsOSBA
QAogCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUyNjFGM0Q0
ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgKi87IH07CiAJCTUxRjE3NTJDMUYz
RDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUyNzFGM0Q0ODYwMDBDNzQ5NTAgLyog
UGVyc2lzdGVudERlY29kZXIuY3BwICovOyB9OwogCQk1MUYxNzUyRDFGM0Q0ODYwMDBDNzQ5NTAg
LyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMTc1MjkxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRFbmNv
ZGVyLmNwcCAqLzsgfTsKKwkJNTFGMTc1MzcxRjNENEI2NDAwQzc0OTUwIC8qIENvZGVycy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUzMTFG
M0Q0QjY0MDBDNzQ5NTAgLyogQ29kZXJzLmNwcCAqLzsgfTsKKwkJNTFGMTc1MzgxRjNENEI2NDAw
Qzc0OTUwIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFGMTc1MzMxRjNENEI2NDAwQzc0OTUwIC8qIERlY29kZXIuY3BwICovOyB9
OworCQk1MUYxNzUzOTFGM0Q0QjY0MDBDNzQ5NTAgLyogRW5jb2Rlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUzNTFGM0Q0QjY0MDBDNzQ5
NTAgLyogRW5jb2Rlci5jcHAgKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3NkE4NEVFQkVBOCAvKiBT
eW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNwcCAqLzsgfTsKIAkJ
NTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTExRUE3MUNBRDAwNTI1MjgxIC8q
IFNpZ25hbHMuY3BwICovOyB9OwogCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFk
TWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi87IH07CkBA
IC0zMTAsNiArMzEzLDEzIEBACiAJCTUxRjE3NTI4MUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0
ZW50RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW50
RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUYxNzUyOTFGM0Q0ODYw
MDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGVyc2lzdGVudEVuY29kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVudEVuY29kZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzAxRjNENEI2NDAwQzc0OTUwIC8q
IENvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjE3NTMxMUYzRDRCNjQwMEM3NDk1MCAvKiBDb2Rl
cnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzIxRjNENEI2NDAwQzc0OTUwIC8q
IENvZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzMxRjNENEI2NDAwQzc0OTUwIC8qIERl
Y29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjb2Rlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjE3NTM0MUYzRDRCNjQwMEM3NDk1
MCAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY29kZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzUxRjNENEI2NDAwQzc0OTUw
IC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRW5j
b2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjE3NTM2MUYzRDRCNjQw
MEM3NDk1MCAvKiBFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVu
Y29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTExRUE3MUNBRDAw
NTI1MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU1MUVB
N0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NrbGVzc0JhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzEx
QkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDMs
NiArNjUzLDIwIEBACiAJCQlwYXRoID0gZGFyd2luOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJNTFGMTc1MkYxRjNENEIzMzAwQzc0OTUwIC8qIG1lbW9yeSAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFGMTc1MzAxRjNENEI2NDAw
Qzc0OTUwIC8qIENvZGVyLmggKi8sCisJCQkJNTFGMTc1MzExRjNENEI2NDAwQzc0OTUwIC8qIENv
ZGVycy5jcHAgKi8sCisJCQkJNTFGMTc1MzIxRjNENEI2NDAwQzc0OTUwIC8qIENvZGVycy5oICov
LAorCQkJCTUxRjE3NTMzMUYzRDRCNjQwMEM3NDk1MCAvKiBEZWNvZGVyLmNwcCAqLywKKwkJCQk1
MUYxNzUzNDFGM0Q0QjY0MDBDNzQ5NTAgLyogRGVjb2Rlci5oICovLAorCQkJCTUxRjE3NTM1MUYz
RDRCNjQwMEM3NDk1MCAvKiBFbmNvZGVyLmNwcCAqLywKKwkJCQk1MUYxNzUzNjFGM0Q0QjY0MDBD
NzQ5NTAgLyogRW5jb2Rlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBtZW1vcnk7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDI0N0I1NzE0Njg5Qjg2MDBFNzhCNzYgPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzE3LDYgKzc0MSw3IEBA
CiAJCQkJQThBNDcyODExNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EgKi8sCiAJCQkJMUZBNDdDODcx
NTI1MDJEQTAwNTY4RDFCIC8qIGlvcyAqLywKIAkJCQlBOEE0NzJDNDE1MUE4MjVBMDA0MTIzRkYg
LyogbWFjICovLAorCQkJCTUxRjE3NTJGMUYzRDRCMzMwMEM3NDk1MCAvKiBtZW1vcnkgKi8sCiAJ
CQkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1IC8qIHBlcnNpc3RlbmNlICovLAogCQkJCUNFRjQ4
MjBDMTlEQTM0NzYwMENDMDRCOCAvKiBzcGkgKi8sCiAJCQkJQThBNDczMUIxNTFBODI1QjAwNDEy
M0ZGIC8qIHRleHQgKi8sCkBAIC0xMzcxLDExICsxMzk2LDEzIEBACiAJCQkJQTNCNzI1RUM5ODc0
NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0
NzQxNDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTFGMTc1MzkxRjNENEI2NDAwQzc0OTUwIC8qIEVuY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1
bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYg
LyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTkxNkVBQjA0
MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Njk0
MTk3MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gaW4gU291cmNlcyAqLywK
KwkJCQk1MUYxNzUzNzFGM0Q0QjY0MDBDNzQ5NTAgLyogQ29kZXJzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjZCMjhFMURDOTdCQUIwMDRBMUQzRiAvKiBTZWNvbmRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4QTQ3NDIxMTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTM5NSw2ICsxNDIyLDcgQEAKIAkJCQk5M0YxOTkzRTE5RDc5NThEMDBDMjM5
MEIgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzkzNEJENTE4QTFGMTY5
MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzOTM0QkQz
MThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3T2JqQy5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTUxRjE3NTM4MUYzRDRCNjQwMEM3NDk1MCAvKiBEZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3M0I3MTUxQTgyNUIwMDQxMjNGRiAvKiBzdHJ0b2QuY2MgaW4gU291cmNlcyAqLywK
IAkJCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGZhMmI2MTY2MDdiLi4yNjgx
MWQxMTllZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTI3Miw2ICsyNzIsMTAgQEAgc2V0KFdU
Rl9TT1VSQ0VTCiAgICAgZHRvYS9maXhlZC1kdG9hLmNjCiAgICAgZHRvYS9zdHJ0b2QuY2MKIAor
ICAgIG1lbW9yeS9Db2RlcnMuY3BwCisgICAgbWVtb3J5L0RlY29kZXIuY3BwCisgICAgbWVtb3J5
L0VuY29kZXIuY3BwCisgICAgCiAgICAgcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5jcHAK
ICAgICBwZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rlci5jcHAKICAgICBwZXJzaXN0ZW5jZS9Q
ZXJzaXN0ZW50RW5jb2Rlci5jcHAKQEAgLTMxMSw2ICszMTUsNyBAQCBzZXQoV1RGX0lOQ0xVREVf
RElSRUNUT1JJRVMKIHNldChXVEZfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7
V1RGX0RJUn0vd3RmIgogICAgICIke1dURl9ESVJ9L3d0Zi9kdG9hIgorICAgICIke1dURl9ESVJ9
L3d0Zi9tZW1vcnkiCiAgICAgIiR7V1RGX0RJUn0vd3RmL3BlcnNpc3RlbmNlIgogICAgICIke1dU
Rl9ESVJ9L3d0Zi90ZXh0IgogICAgICIke1dURl9ESVJ9L3d0Zi90ZXh0L2ljdSIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9Db2Rlci5oIGIvU291cmNlL1dURi93dGYvbWVtb3J5
L0NvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRhOGRmNGRi
NTNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVyLmgKQEAg
LTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7CisgICAgCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIgeworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAgdC5lbmNvZGUoZW5jb2Rl
cik7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQm
IHQpCisgICAgeworICAgICAgICByZXR1cm4gVDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgIH0K
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9Db2RlcnMuY3BwIGIv
U291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjRiY2QyNDg5YWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvbWVtb3J5L0NvZGVycy5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2RlcnMuaCIKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgQ29kZXI8QXRvbWljU3RyaW5nPjo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEF0b21pY1N0cmluZyYgYXRvbWljU3RyaW5nKQorewor
ICAgIGVuY29kZXIgPDwgYXRvbWljU3RyaW5nLnN0cmluZygpOworfQorCitib29sIENvZGVyPEF0
b21pY1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBBdG9taWNTdHJpbmcmIGF0b21p
Y1N0cmluZykKK3sKKyAgICBTdHJpbmcgc3RyaW5nOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXRvbWljU3RyaW5nID0gc3Ry
aW5nOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvZGVyPENTdHJpbmc+OjplbmNvZGUo
RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQoreworICAgIC8vIFNwZWNp
YWwgY2FzZSB0aGUgbnVsbCBzdHJpbmcuCisgICAgaWYgKHN0cmluZy5pc051bGwoKSkgeworICAg
ICAgICBlbmNvZGVyIDw8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQzMl90IGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKKyAgICBlbmNvZGVyIDw8IGxlbmd0aDsKKyAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVu
Z3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuZGF0YSgpKSwg
bGVuZ3RoKTsKK30KKworYm9vbCBDb2RlcjxDU3RyaW5nPjo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIENTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICB1aW50MzJfdCBsZW5ndGg7CisgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZShsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bGVuZ3RoID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkgeworICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBudWxsIHN0cmluZy4KKyAgICAgICAgcmVzdWx0ID0gQ1N0cmluZygp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBCZWZvcmUgYWxsb2NhdGlu
ZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZmZXIgaXMgYmlnIGVu
b3VnaC4KKyAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbjxjaGFy
PihsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjaGFyKiBidWZmZXI7Cisg
ICAgQ1N0cmluZyBzdHJpbmcgPSBDU3RyaW5nOjpuZXdVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlciksIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJlc3VsdCA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit2b2lkIENv
ZGVyPFN0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgorICAgIGlmIChzdHJp
bmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50MzJfdCBs
ZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgYm9vbCBpczhCaXQgPSBzdHJpbmcuaXM4Qml0
KCk7CisKKyAgICBlbmNvZGVyIDw8IGxlbmd0aCA8PCBpczhCaXQ7CisKKyAgICBpZiAoaXM4Qml0
KQorICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzdHJpbmcuY2hhcmFjdGVyczgoKSksIGxlbmd0aCAqIHNpemVvZihM
Q2hhcikpOworICAgIGVsc2UKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNoYXJhY3RlcnMxNigpKSwg
bGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorc3RhdGljIGlubGluZSBib29sIGRlY29kZVN0cmluZ1RleHQoRGVjb2RlciYgZGVj
b2RlciwgdWludDMyX3QgbGVuZ3RoLCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICAvLyBCZWZvcmUg
YWxsb2NhdGluZyB0aGUgc3RyaW5nLCBtYWtlIHN1cmUgdGhhdCB0aGUgZGVjb2RlciBidWZmZXIg
aXMgYmlnIGVub3VnaC4KKyAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJnZUVub3VnaFRvQ29u
dGFpbjxDaGFyYWN0ZXJUeXBlPihsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBDaGFyYWN0ZXJUeXBlKiBidWZmZXI7CisgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZzo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBsZW5n
dGggKiBzaXplb2YoQ2hhcmFjdGVyVHlwZSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmVzdWx0ID0gc3RyaW5nOworICAgIHJldHVybiB0cnVlOyAgICAKK30KKworYm9vbCBD
b2RlcjxTdHJpbmc+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5nJiByZXN1bHQpCit7
CisgICAgdWludDMyX3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBz
dHJpbmcuCisgICAgICAgIHJlc3VsdCA9IFN0cmluZygpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBib29sIGlzOEJpdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzOEJp
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpczhCaXQpCisgICAgICAgIHJl
dHVybiBkZWNvZGVTdHJpbmdUZXh0PExDaGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIGRlY29kZVN0cmluZ1RleHQ8VUNoYXI+KGRlY29kZXIsIGxlbmd0aCwgcmVzdWx0
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVycy5oIGIv
U291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi43YTg3NjAwZjQxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL21lbW9yeS9Db2RlcnMuaApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9tZW1vcnkvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9tZW1vcnkvRW5j
b2Rlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gc3RydWN0IENvZGVyPHN0ZDo6cGFpcjxULCBVPj4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBzdGQ6OnBhaXI8VCwgVT4mIHBhaXIpCisgICAg
eworICAgICAgICBlbmNvZGVyIDw8IHBhaXIuZmlyc3QgPDwgcGFpci5zZWNvbmQ7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0ZDo6cGFpcjxULCBV
PiYgcGFpcikKKyAgICB7CisgICAgICAgIFQgZmlyc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoZmlyc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFUgc2Vj
b25kOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNlY29uZCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcGFpci5maXJzdCA9IGZpcnN0OworICAgICAgICBwYWly
LnNlY29uZCA9IHNlY29uZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgUmVwLCB0eXBlbmFtZSBQZXJpb2Q+IHN0cnVjdCBDb2RlcjxzdGQ6OmNo
cm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVu
Y29kZXImIGVuY29kZXIsIGNvbnN0IHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4m
IGR1cmF0aW9uKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFs
PFJlcD46OnZhbHVlICYmIHN0ZDo6aXNfc2lnbmVkPFJlcD46OnZhbHVlICYmIHNpemVvZihSZXAp
IDw9IHNpemVvZihpbnQ2NF90KSwgIlNlcmlhbGl6YXRpb24gb2YgdGhpcyBSZXAgdHlwZSBpcyBu
b3Qgc3VwcG9ydGVkIHlldC4gT25seSBzaWduZWQgaW50ZWdlciB0eXBlIHdoaWNoIGNhbiBiZSBm
aXQgaW4gYW4gaW50NjRfdCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLiIpOworICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KGR1cmF0aW9uLmNvdW50KCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OmNocm9ubzo6ZHVy
YXRpb248UmVwLCBQZXJpb2Q+JiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IGNvdW50
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvdW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmVzdWx0ID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVy
aW9kPihzdGF0aWNfY2FzdDxSZXA+KGNvdW50KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb2RlcjxzdGQ6Om9wdGlvbmFs
PFQ+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgaWYgKCFvcHRpb25hbCkg
eworICAgICAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNv
ZGVyIDw8IG9wdGlvbmFsLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6Om9wdGlvbmFsPFQ+JiBvcHRpb25hbCkKKyAgICB7
CisgICAgICAgIGJvb2wgaXNFbmdhZ2VkOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlz
RW5nYWdlZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoIWlzRW5nYWdlZCkgeworICAgICAgICAgICAgb3B0aW9uYWwgPSBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCB2
YWx1ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBvcHRpb25hbCA9IFdURk1vdmUodmFsdWUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+IHN0cnVjdCBDb2RlcjxXVEY6OktleVZhbHVlUGFp
cjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXIm
IGVuY29kZXIsIGNvbnN0IFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBh
aXIpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHBhaXIua2V5IDw8IHBhaXIudmFsdWU7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdURjo6S2V5
VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4mIHBhaXIpCisgICAgeworICAgICAgICBLZXlU
eXBlIGtleTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLmRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcGFpci5rZXkgPSBrZXk7CisgICAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8Ym9vbCBmaXhlZFNpemVFbGVtZW50
cywgdHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZl
Y3RvckNvZGVyPGZhbHNlLCBULCBpbmxpbmVDYXBhY2l0eT4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2
ZWN0b3IpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2
ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBlbmNvZGVyIDw8IHZlY3RvcltpXTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgdWludDY0X3Qgc2l6ZTsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRtcDsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgIFQgZWxlbWVudDsKKyAgICAg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZWxlbWVudCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICB0bXAuYXBwZW5kKFdURk1vdmUo
ZWxlbWVudCkpOworICAgICAgICB9CisKKyAgICAgICAgdG1wLnNocmlua1RvRml0KCk7CisgICAg
ICAgIHZlY3Rvci5zd2FwKHRtcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3Rv
ckNvZGVyPHRydWUsIFQsIGlubGluZUNhcGFjaXR5PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3Rv
cikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rv
ci5zaXplKCkpOworICAgICAgICBlbmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAq
IHNpemVvZihUKSwgYWxpZ25vZihUKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3Ip
CisgICAgeworICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFNpbmNl
IHdlIGtub3cgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGVsZW1lbnRzLCB3ZSBjYW4gYWxsb2NhdGUg
dGhlIHZlY3RvciBpbgorICAgICAgICAvLyBvbmUgZmVsbCBzd29vcC4gQmVmb3JlIGFsbG9jYXRp
bmcgd2UgbXVzdCBob3dldmVyIG1ha2Ugc3VyZSB0aGF0IHRoZSBkZWNvZGVyIGJ1ZmZlcgorICAg
ICAgICAvLyBpcyBiaWcgZW5vdWdoLgorICAgICAgICBpZiAoIWRlY29kZXIuYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbjxUPihzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IHRlbXA7CisgICAgICAgIHRlbXAuZ3Jv
dyhzaXplKTsKKworICAgICAgICBkZWNvZGVyLmRlY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPih0ZW1wLmRhdGEoKSksIHNpemUgKiBzaXplb2YoVCkpOworCisg
ICAgICAgIHZlY3Rvci5zd2FwKHRlbXApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHN0cnVjdCBD
b2RlcjxWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+PiA6IFZlY3RvckNvZGVyPHN0ZDo6aXNfYXJp
dGhtZXRpYzxUPjo6dmFsdWUsIFQsIGlubGluZUNhcGFjaXR5PiB7IH07CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBl
bmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZz4gc3RydWN0IENvZGVy
PEhhc2hNYXA8S2V5QXJnLCBNYXBwZWRBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZywgTWFwcGVk
VHJhaXRzQXJnPj4geworICAgIHR5cGVkZWYgSGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFyZywgSGFz
aEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+IEhhc2hNYXBUeXBlOworCisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IEhhc2hNYXBUeXBlJiBo
YXNoTWFwKQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
aGFzaE1hcC5zaXplKCkpOworICAgICAgICBmb3IgKHR5cGVuYW1lIEhhc2hNYXBUeXBlOjpjb25z
dF9pdGVyYXRvciBpdCA9IGhhc2hNYXAuYmVnaW4oKSwgZW5kID0gaGFzaE1hcC5lbmQoKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZW5jb2RlciA8PCAqaXQ7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIEhhc2hNYXBUeXBlJiBoYXNoTWFw
KQorICAgIHsKKyAgICAgICAgdWludDY0X3QgaGFzaE1hcFNpemU7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoaGFzaE1hcFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIEhhc2hNYXBUeXBlIHRlbXBIYXNoTWFwOworICAgICAgICBmb3IgKHVpbnQ2NF90IGkg
PSAwOyBpIDwgaGFzaE1hcFNpemU7ICsraSkgeworICAgICAgICAgICAgS2V5QXJnIGtleTsKKyAg
ICAgICAgICAgIE1hcHBlZEFyZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoa2V5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIGlmICghdGVtcEhhc2hNYXAuYWRkKGtleSwgdmFsdWUpLmlzTmV3RW50cnkp
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNp
ZmllZCBrZXksIGJhaWwuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaGFzaE1hcC5zd2FwKHRlbXBIYXNoTWFwKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJn
LCB0eXBlbmFtZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmc+IHN0cnVjdCBDb2RlcjxI
YXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnPj4geworICAgIHR5cGVkZWYgSGFz
aFNldDxLZXlBcmcsIEhhc2hBcmcsIEtleVRyYWl0c0FyZz4gSGFzaFNldFR5cGU7CisKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSGFzaFNldFR5cGUmIGhh
c2hTZXQpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90Piho
YXNoU2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodHlwZW5hbWUgSGFzaFNldFR5cGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGFzaFNldC5iZWdpbigpLCBlbmQgPSBoYXNoU2V0LmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpCisgICAgICAgICAgICBlbmNvZGVyIDw8ICppdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSGFzaFNldFR5cGUmIGhhc2hTZXQp
CisgICAgeworICAgICAgICB1aW50NjRfdCBoYXNoU2V0U2l6ZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShoYXNoU2V0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgSGFzaFNldFR5cGUgdGVtcEhhc2hTZXQ7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9
IDA7IGkgPCBoYXNoU2V0U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAg
ICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCF0ZW1wSGFzaFNldC5hZGQoa2V5KS5pc05ld0Vu
dHJ5KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGhhc2ggbWFwIGFscmVhZHkgaGFzIHRoZSBz
cGVjaWZpZWQga2V5LCBiYWlsLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGhhc2hTZXQuc3dhcCh0ZW1wSGFzaFNldCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENv
ZGVyPHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+IHsKKyAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludCYgdGltZVBvaW50KQorICAgIHsKKyAgICAgICAgZW5jb2RlciA8PCBz
dGF0aWNfY2FzdDxpbnQ2NF90Pih0aW1lUG9pbnQudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCYgcmVzdWx0KQorICAgIHsKKyAg
ICAgICAgaW50NjRfdCB0aW1lOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IHN0ZDo6Y2hyb25v
OjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6ZHVy
YXRpb24oc3RhdGljX2Nhc3Q8c3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6cmVwPih0aW1lKSkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxTZWNvbmRzPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IFNlY29uZHMmIHNlY29uZHMpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHNlY29u
ZHMudmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVj
b2RlciwgU2Vjb25kcyYgcmVzdWx0KQorICAgIHsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICByZXN1bHQgPSBTZWNvbmRzKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8QXRvbWljU3RyaW5nPiB7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29u
c3QgQXRvbWljU3RyaW5nJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgQXRvbWljU3RyaW5nJik7Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b2RlcjxDU3RyaW5nPiB7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29k
ZShFbmNvZGVyJiwgY29uc3QgQ1N0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0
aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIENTdHJpbmcmKTsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvZGVyPFN0cmluZz4geworICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYsIGNvbnN0IFN0cmluZyYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBz
dGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIFN0cmluZyYpOworfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvbWVtb3J5L0RlY29kZXIuY3BwIGIvU291cmNlL1dURi93dGYvbWVt
b3J5L0RlY29kZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44
Yzg5MzdlN2MzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9EZWNv
ZGVyLmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvbWVt
b3J5L0VuY29kZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK0RlY29kZXI6OkRlY29kZXIoY29u
c3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKKyAgICA6IG1fYnVmZmVyKGJ1
ZmZlcikKKyAgICAsIG1fYnVmZmVyUG9zaXRpb24oYnVmZmVyKQorICAgICwgbV9idWZmZXJFbmQo
YnVmZmVyICsgYnVmZmVyU2l6ZSkKK3sKK30KKworRGVjb2Rlcjo6fkRlY29kZXIoKQoreworfQor
Citib29sIERlY29kZXI6OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZl
ckVuZCAtIG1fYnVmZmVyUG9zaXRpb24pOworfQorCitib29sIERlY29kZXI6OmRlY29kZUZpeGVk
TGVuZ3RoRGF0YSh1aW50OF90KiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIWJ1ZmZl
cklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIG1lbWNweShkYXRhLCBtX2J1ZmZlclBvc2l0aW9uLCBzaXplKTsKKyAgICBtX2J1ZmZlclBv
c2l0aW9uICs9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVHlwZT4KK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlTnVtYmVyKFR5cGUmIHZhbHVlKQoreworICAg
IGlmICghYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihzaXplb2YodmFsdWUpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgbWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwg
c2l6ZW9mKHZhbHVlKSk7CisgICAgbV9idWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoYm9vbCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDhfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVz
dWx0KTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDE2X3QmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2Rl
KHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOwor
fQorCitib29sIERlY29kZXI6OmRlY29kZSh1aW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVy
biBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50MzJf
dCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9v
bCBEZWNvZGVyOjpkZWNvZGUoaW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoZmxvYXQmIHJlc3VsdCkK
K3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6
ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWVtb3J5L0RlY29kZXIuaCBi
L1NvdXJjZS9XVEYvd3RmL21lbW9yeS9EZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjk0NjIxOWRjNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dU
Ri93dGYvbWVtb3J5L0RlY29kZXIuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvbWVtb3J5L0NvZGVyLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBEZWNvZGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgRGVjb2Rlcihjb25zdCB1aW50OF90KiBidWZm
ZXIsIHNpemVfdCBidWZmZXJTaXplKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkRlY29kZXIo
KTsKKworICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlckVuZCAtIG1f
YnVmZmVyOyB9CisgICAgc2l6ZV90IGN1cnJlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J1
ZmZlclBvc2l0aW9uIC0gbV9idWZmZXI7IH0KKworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29s
IGRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90Kiwgc2l6ZV90KTsKKworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBib29sIGRlY29kZShib29sJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKHVpbnQ4X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUo
dWludDE2X3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDMyX3Qm
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUodWludDY0X3QmKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoaW50MzJfdCYpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIGRlY29kZShpbnQ2NF90Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgZGVjb2RlKGZsb2F0Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKGRv
dWJsZSYpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBkZWNvZGVFbnVtKFQmIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFQpIDw9IDgsICJFbnVt
IHR5cGUgVCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiA2NCBiaXRzISIpOworCisgICAgICAgIHVp
bnQ2NF90IHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZSh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPih2
YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGJvb2wgZGVjb2RlKFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4gQ29kZXI8VD46
OmRlY29kZSgqdGhpcywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IG51bUVsZW1lbnRzKSBj
b25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2FyaXRobWV0aWM8VD46
OnZhbHVlLCAiVHlwZSBUIG11c3QgaGF2ZSBhIGZpeGVkLCBrbm93biBlbmNvZGVkIHNpemUhIik7
CisKKyAgICAgICAgaWYgKG51bUVsZW1lbnRzID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSAvIHNpemVvZihUKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXR1cm4gYnVmZmVySXNMYXJnZUVub3VnaFRvQ29udGFpbihudW1FbGVtZW50cyAqIHNpemVv
ZihUKSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENEZWNvZGVyID0gZmFs
c2U7CisKK3ByaXZhdGU6CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgYnVmZmVySXNMYXJn
ZUVub3VnaFRvQ29udGFpbihzaXplX3QpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+IGJvb2wgZGVjb2RlTnVtYmVyKFR5cGUmKTsKKworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVm
ZmVyOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyUG9zaXRpb247CisgICAgY29uc3QgdWlu
dDhfdCogbV9idWZmZXJFbmQ7Cit9OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L21lbW9yeS9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9FbmNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTFiODE4Yjk2Y2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkvRW5jb2Rlci5jcHAKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRW5jb2Rlci5oIgorCituYW1lc3BhY2UgV1RGIHsKKworRW5jb2Rlcjo6RW5jb2RlcigpCit7
Cit9CisKK0VuY29kZXI6On5FbmNvZGVyKCkKK3sKK30KKwordWludDhfdCogRW5jb2Rlcjo6Z3Jv
dyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBzaXplX3QgbmV3UG9zaXRpb24gPSBtX2J1ZmZlci5zaXpl
KCk7CisgICAgbV9idWZmZXIuZ3JvdyhtX2J1ZmZlci5zaXplKCkgKyBzaXplKTsKKyAgICByZXR1
cm4gbV9idWZmZXIuZGF0YSgpICsgbmV3UG9zaXRpb247Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5j
b2RlRml4ZWRMZW5ndGhEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQorewor
ICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6ZSk7CisgICAgbWVtY3B5KGJ1ZmZlciwgZGF0
YSwgc2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Cit2b2lkIEVuY29kZXI6OmVu
Y29kZU51bWJlcihUeXBlIHZhbHVlKQoreworICAgIHVpbnQ4X3QqIGJ1ZmZlciA9IGdyb3coc2l6
ZW9mKFR5cGUpKTsKKyAgICBtZW1jcHkoYnVmZmVyLCAmdmFsdWUsIHNpemVvZihUeXBlKSk7Cit9
CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGJvb2wgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVy
KHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUodWludDhfdCB2YWx1ZSkKK3sKKyAg
ICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50MTZf
dCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6
OmVuY29kZSh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQor
Cit2b2lkIEVuY29kZXI6OmVuY29kZSh1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1i
ZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShpbnQzMl90IHZhbHVlKQorewor
ICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKGludDY0
X3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwordm9pZCBFbmNvZGVy
OjplbmNvZGUoZmxvYXQgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKwor
dm9pZCBFbmNvZGVyOjplbmNvZGUoZG91YmxlIHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2
YWx1ZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9FbmNvZGVy
LmggYi9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkvRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40N2YyMTI5OTFhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL21lbW9yeS9FbmNvZGVyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9t
ZW1vcnkvQ29kZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEVuY29kZXI7CisKK2Ns
YXNzIEVuY29kZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBFbmNvZGVyKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5F
bmNvZGVyKCk7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0
aERhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIGVuY29kZUVudW0oVCB0KQorICAgIHsKKyAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKFQpIDw9IHNpemVvZih1aW50NjRfdCksIGVudW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJf
dGhhbl82NF9iaXRzKTsKKworICAgICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZShjb25zdCBU
JiB0KQorICAgIHsKKyAgICAgICAgQ29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0
KQorICAgIHsKKyAgICAgICAgZW5jb2RlKHQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
fQorCisgICAgY29uc3QgdWludDhfdCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
ZGF0YSgpOyB9CisgICAgc2l6ZV90IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci5zaXplKCk7IH0KKworICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRW5jb2RlciA9IGZhbHNl
OworCitwcml2YXRlOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29sKTsK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDhfdCk7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKHVpbnQxNl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBlbmNvZGUodWludDMyX3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVu
Y29kZSh1aW50NjRfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDMy
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGVuY29kZShkb3VibGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4g
dm9pZCBlbmNvZGVOdW1iZXIoVHlwZSk7CisKKyAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisK
KyAgICBWZWN0b3I8dWludDhfdCwgNDA5Nj4gbV9idWZmZXI7Cit9OworCit9CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzZmYzE5NmRkY2YuLmFk
NzM1YmIzNmQwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDgtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBpbi1tZW1vcnkgZW5jb2Rlci9kZWNvZGVycyB0byBX
VEYuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU0
NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
dGVzdHMgdG8gdmVyaWZ5IHRoYXQgdGhlIG1lbW9yeSBjb2RlcnMgYXJlIGZhc3RlciBhbmQgZ2Vu
ZXJhdGUgc21hbGxlciBvdXRwdXQKKyAgICAgICAgdGhhbiB0aGUgcGVyc2lzdGVuY2UgY29kZXJz
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29kaW5nLmNw
cDogQWRkZWQuCisKIDIwMTctMDgtMTAgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhZGRpbmcgUm9zcyBLaXJzbGluZyB0byBjb250
cmlidXRvcnMuanNvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMjc5MDRmNTg4Ny4uZDUx
ZjI0OWU5YmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzMsNiArMTczLDcgQEAKIAkJ
NTFCMUVFOTcxQzgwRkFFRjAwNjRGQjk4IC8qIEluZGV4ZWREQlBlcnNpc3RlbmNlLTIuaHRtbCBp
biBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIx
RUU5NTFDODBGQUREMDA2NEZCOTggLyogSW5kZXhlZERCUGVyc2lzdGVuY2UtMi5odG1sICovOyB9
OwogCQk1MUJDRUU0RTFDODRGNTNCMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTEu
aHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUJDRUU0QzFDODRGNTJDMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTEuaHRt
bCAqLzsgfTsKIAkJNTFCQ0VFNEYxQzg0RjUzQjAwNDJDODJFIC8qIEluZGV4ZWREQk11bHRpUHJv
Y2Vzcy0yLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFCQ0VFNEQxQzg0RjUyQzAwNDJDODJFIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vz
cy0yLmh0bWwgKi87IH07CisJCTUxQkVCNjUwMUYzQ0ZGRDMwMDUwMjlCOSAvKiBDb2RpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCRUI2NEYx
RjNDRkZDOTAwNTAyOUI5IC8qIENvZGluZy5jcHAgKi87IH07CiAJCTUxQzY4M0RFMUVBMTM0RTgw
MDY1MDE4MyAvKiBXS1VSTFNjaGVtZUhhbmRsZXItMS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzY4M0REMUVBMTM0REIwMDY1MDE4MyAvKiBXS1VS
TFNjaGVtZUhhbmRsZXItMS5tbSAqLzsgfTsKIAkJNTFDOEUxQTUxRjI2QUY0QzAwQkY3MzFCIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUM4RTFBNDFGMjZBQzU0MDBCRjczMUIgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcy5tbSAqLzsgfTsKIAkJNTFDOEUxQTkxRjI3RjQ5NjAwQkY3MzFCIC8qIEVtcHR5
R3JhbmRmYXRoZXJlZFJlc291cmNlTG9hZFN0YXRpc3RpY3MucGxpc3QgaW4gQ29weSBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDOEUxQTgxRjI3RjQ3MzAw
QkY3MzFCIC8qIEVtcHR5R3JhbmRmYXRoZXJlZFJlc291cmNlTG9hZFN0YXRpc3RpY3MucGxpc3Qg
Ki87IH07CkBAIC0xMjMwLDYgKzEyMzEsNyBAQAogCQk1MUJDRUU0OTFDODRGNEFGMDA0MkM4MkUg
LyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gSW5kZXhlZERCTXVsdGlQcm9jZXNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MUJDRUU0QzFDODRGNTJDMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9j
ZXNzLTEuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJJbmRleGVkREJNdWx0aVBy
b2Nlc3MtMS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCQ0VFNEQxQzg0
RjUyQzAwNDJDODJFIC8qIEluZGV4ZWREQk11bHRpUHJvY2Vzcy0yLmh0bWwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0Lmh0bWw7IHBhdGggPSAiSW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQkVCNjRGMUYzQ0ZGQzkwMDUwMjlCOSAvKiBDb2Rpbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFDNjgzREQxRUExMzREQjAwNjUwMTgzIC8qIFdLVVJMU2NoZW1lSGFuZGxlci0x
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gIldLVVJMU2NoZW1l
SGFuZGxlci0xLm1tIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDOEUxQTQxRjI2
QUM1NDAwQkY3MzFCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUM4RTFBODFGMjdGNDczMDBCRjczMUIgLyogRW1wdHlHcmFuZGZhdGhlcmVkUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGUuYnBsaXN0OyBwYXRoID0gRW1wdHlHcmFuZGZhdGhlcmVk
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI0MDYsNiArMjQwOCw3IEBACiAJCQkJMjZGMUI0NDIxNUNBNDM0RjAwRDFFNEJGIC8qIEF0
b21pY1N0cmluZy5jcHAgKi8sCiAJCQkJRTQwMDE5MzAxQUNFOUI1QzAwMUIwQTJBIC8qIEJsb29t
RmlsdGVyLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFy
aXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk1MUJFQjY0RjFGM0NGRkM5MDA1MDI5Qjkg
LyogQ29kaW5nLmNwcCAqLywKIAkJCQkwRkVBRTM2NzFCN0QxOUNCMDBDRTE3RjIgLyogQ29uZGl0
aW9uLmNwcCAqLywKIAkJCQk1MTcxNEVCOTFEMDg3NDE2MDA0NzIzQzQgLyogQ3Jvc3NUaHJlYWRU
YXNrLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAg
Ki8sCkBAIC0yOTk4LDYgKzMwMDEsNyBAQAogCQkJCTdDODNERjE2MUQwQTU5MEMwMEZFQkNGMyAv
KiBSZWZQdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjQxRDBBNTkwQzAwRkVCQ0Yz
IC8qIFJldGFpblB0ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjA1MUQwQTU5MEMwMEZF
QkNGMyAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxQkVCNjUwMUYzQ0ZGRDMw
MDUwMjlCOSAvKiBDb2RpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMjYxRDBBNTkw
QzAwRkVCQ0YzIC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMzUyNEFFMUQ2M0E0RkIwMDMxNzI5QiAvKiBTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3QzgzREYxMjFEMEE1OTBDMDBGRUJDRjMgLyogU2NvcGVkTGFtYmRhLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
Q29kaW5nLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvZGluZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiMTI5ZDE0YzFhCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ29kaW5nLmNwcApAQCAt
MCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvbWVtb3J5L0RlY29kZXIuaD4KKyNp
bmNsdWRlIDx3dGYvbWVtb3J5L0VuY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2Uv
UGVyc2lzdGVudERlY29kZXIuaD4KKyNpbmNsdWRlIDx3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVu
dEVuY29kZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgeworCitURVNUKFdURl9Db2RpbmcsIE1lbW9yeUNvZGluZ1NtYWxsZXJUaGFuUGVyc2lz
dGVudENvZGluZykKK3sKKyAgICB1aW50NjRfdCB0ZXN0VmFsdWUgPSAyNjMxOworICAgIEVuY29k
ZXIgZW5jb2RlcjsKKyAgICBQZXJzaXN0ZW5jZTo6RW5jb2RlciBwZXJzaXN0ZW50RW5jb2RlcjsK
KyAgICBlbmNvZGVyIDw8IHRlc3RWYWx1ZTsKKyAgICBwZXJzaXN0ZW50RW5jb2RlciA8PCB0ZXN0
VmFsdWU7CisgICAgcGVyc2lzdGVudEVuY29kZXIuZW5jb2RlQ2hlY2tzdW0oKTsKKworICAgIEVY
UEVDVF9UUlVFKHBlcnNpc3RlbnRFbmNvZGVyLmJ1ZmZlclNpemUoKSA+IGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKworICAgIERlY29kZXIgZGVjb2RlcihlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSk7CisgICAgUGVyc2lzdGVuY2U6OkRlY29kZXIgcGVyc2lzdGVudERlY29k
ZXIocGVyc2lzdGVudEVuY29kZXIuYnVmZmVyKCksIHBlcnNpc3RlbnRFbmNvZGVyLmJ1ZmZlclNp
emUoKSk7CisKKyAgICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50RGVjb2Rlci5sZW5ndGgoKSA+IGRl
Y29kZXIubGVuZ3RoKCkpOworCisgICAgdWludDY0X3QgZGVjb2RlVmFsdWUxLCBkZWNvZGVWYWx1
ZTI7CisKKyAgICBFWFBFQ1RfVFJVRShkZWNvZGVyLmRlY29kZShkZWNvZGVWYWx1ZTEpKTsKKyAg
ICBFWFBFQ1RfVFJVRShwZXJzaXN0ZW50RGVjb2Rlci5kZWNvZGUoZGVjb2RlVmFsdWUyKSk7Cisg
ICAgRVhQRUNUX0VRKGRlY29kZVZhbHVlMSwgZGVjb2RlVmFsdWUyKTsKKyAgICBFWFBFQ1RfRVEo
ZGVjb2RlVmFsdWUxLCB0ZXN0VmFsdWUpOworfQorCisvLyBFbmNvZGluZyBzaG91bGQgYmUgfjIu
NXggZmFzdGVyIHRoYW4gY2hlY2tzdW0gKHBlcnNpc3RlbnQpIGVuY29kaW5nLgorLy8gRGVjb2Rp
bmcgc2hvdWxkIGJlIH42eCBmYXN0ZXIgdGhlbiBjaGVja3N1bSAocGVyc2lzdGVudCkgZGVjb2Rp
bmcuCisvLyBDb21wYXJlIDEwLDAwMCBydW5zIG9mIHRoZSBiYXNlIGVuY29kZXIvZGVjb2RlciB2
cyA5LDAwMCBydW5zIG9mIHRoZSBjaGVja3N1bSBlbmNvZGVyL2RlY29kZXIuCisvLyBUaGlzIHNo
b3VsZCByZWxpYWJsZSBjYXB0dXJlIGEgbWlzdGFrZSB3aGVyZSBib3RoIGVuY29kZXJzIHN0YXJ0
IGRvaW5nIHRoZSBleHRyYSB3b3JrIG9mIGNoZWNrc3VtbWluZworLy8gYnV0IHNob3VsZCBhbHNv
IHJlbWFpbiBhIHJlbGlhYmxlIHRlc3QgdW50aWwgdGhlIHNwZWVkIGdhcHMgY2xvc2UgYWxtb3N0
IGVudGlyZWx5LgorVEVTVChXVEZfQ29kaW5nLCBNZW1vcnlDb2RpbmdGYXN0ZXJUaGFuUGVyc2lz
dGVudENvZGluZykKK3sKKyAgICB1aW50NjRfdCB0ZXN0VmFsdWUgPSAyNjMxOworICAgIEVuY29k
ZXIgZW5jb2RlcjsKKyAgICBQZXJzaXN0ZW5jZTo6RW5jb2RlciBwZXJzaXN0ZW50RW5jb2RlcjsK
KworICAgIGRvdWJsZSBub3JtYWxUaW1lLCBwZXJzaXN0ZW50VGltZTsKKyAgICBkb3VibGUgc3Rh
cnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgZW5jb2RlciA9IHsgfTsKKyAgICAgICAgZW5jb2RlciA8PCB0ZXN0VmFs
dWU7CisgICAgfQorICAgIG5vcm1hbFRpbWUgPSBjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lOwor
CisgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDkwMDA7ICsraSkgeworICAgICAgICBwZXJzaXN0ZW50RW5jb2RlciA9IHsgfTsKKyAgICAgICAg
cGVyc2lzdGVudEVuY29kZXIgPDwgdGVzdFZhbHVlOworICAgIH0KKyAgICBwZXJzaXN0ZW50VGlt
ZSA9IGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWU7CisKKyAgICBFWFBFQ1RfVFJVRShub3JtYWxU
aW1lIDwgcGVyc2lzdGVudFRpbWUpOworCisgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgRGVjb2RlciBk
ZWNvZGVyID0geyBlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAg
ICAgICBkZWNvZGVyLmRlY29kZSh0ZXN0VmFsdWUpOworICAgIH0KKyAgICBub3JtYWxUaW1lID0g
Y3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZTsKKworICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1l
KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5MDAwOyArK2kpIHsKKyAgICAgICAgUGVyc2lz
dGVuY2U6OkRlY29kZXIgcGVyc2lzdGVudERlY29kZXIgPSB7IHBlcnNpc3RlbnRFbmNvZGVyLmJ1
ZmZlcigpLCBwZXJzaXN0ZW50RW5jb2Rlci5idWZmZXJTaXplKCkgfTsKKyAgICAgICAgcGVyc2lz
dGVudERlY29kZXIuZGVjb2RlKHRlc3RWYWx1ZSk7CisgICAgfQorICAgIHBlcnNpc3RlbnRUaW1l
ID0gY3VycmVudFRpbWUoKSAtIHN0YXJ0VGltZTsKKworICAgIEVYUEVDVF9UUlVFKG5vcm1hbFRp
bWUgPCBwZXJzaXN0ZW50VGltZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
Kwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317915</attachid>
            <date>2017-08-10 21:44:46 -0700</date>
            <delta_ts>2017-08-14 19:18:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175471-20170810214452.patch</filename>
            <type>text/plain</type>
            <size>53566</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDg3ZDY3ZWU2NmRkZThmMDA0YmViYTNh
YmE5ZjkxNTVkNjU4MDExN2YuLjQ3NzM5ODMwNzkwYjNiNDAwOTAxMTUyZjhkM2I5NTk2MmZjZWUy
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNjUgQEAKIDIwMTctMDgtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgogCisgICAgICAgIEFkZCBpbi1tZW1vcnkgZW5jb2Rlci9kZWNvZGVycyB0
byBXVEYuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzU0NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b3B5IHRoZSBQZXJzaXN0ZW50Q29kZXJzIGFuZCByZW1vdmUgYWxsIG9mIHRoZSBTSEExL2NoZWNr
c3VtIGNvZGUsIG1ha2luZyBpbi1tZW1vcnkgY29kZXJzLgorCisgICAgICAgICogV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisKKyAgICAg
ICAgKiB3dGYvbWVtb3J5L0NvZGVyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb2Rlcjo6ZW5j
b2RlKToKKyAgICAgICAgKFdURjo6Q29kZXI6OmRlY29kZSk6CisKKyAgICAgICAgKiB3dGYvbWVt
b3J5L0NvZGVycy5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpDb2RlcjxBdG9taWNTdHJpbmc+
OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUpOgor
ICAgICAgICAoV1RGOjpDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6Q29k
ZXI8Q1N0cmluZz46OmRlY29kZSk6CisgICAgICAgIChXVEY6OkNvZGVyPFN0cmluZz46OmVuY29k
ZSk6CisgICAgICAgIChXVEY6OmRlY29kZVN0cmluZ1RleHQpOgorICAgICAgICAoV1RGOjpDb2Rl
cjxTdHJpbmc+OjpkZWNvZGUpOgorICAgICAgICAqIHd0Zi9tZW1vcnkvQ29kZXJzLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpDb2RlcjxzdGQ6Om9wdGlvbmFsPFQ+Pjo6ZW5jb2RlKToKKyAgICAg
ICAgKFdURjo6Q29kZXI8c3RkOjpvcHRpb25hbDxUPj46OmRlY29kZSk6CisgICAgICAgIChXVEY6
OkNvZGVyPHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQ+OjplbmNvZGUpOgor
ICAgICAgICAoV1RGOjpDb2RlcjxzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdURjo6Q29kZXI8U2Vjb25kcz46OmVuY29kZSk6CisgICAg
ICAgIChXVEY6OkNvZGVyPFNlY29uZHM+OjpkZWNvZGUpOgorCisgICAgICAgICogd3RmL21lbW9y
eS9EZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OkRlY29kZXI6OkRlY29kZXIpOgor
ICAgICAgICAoV1RGOjpEZWNvZGVyOjp+RGVjb2Rlcik6CisgICAgICAgIChXVEY6OkRlY29kZXI6
OmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpEZWNv
ZGVyOjpkZWNvZGVGaXhlZExlbmd0aERhdGEpOgorICAgICAgICAoV1RGOjpEZWNvZGVyOjpkZWNv
ZGVOdW1iZXIpOgorICAgICAgICAoV1RGOjpEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHd0
Zi9tZW1vcnkvRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6RGVjb2Rlcjo6bGVuZ3Ro
IGNvbnN0KToKKyAgICAgICAgKFdURjo6RGVjb2Rlcjo6Y3VycmVudE9mZnNldCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkRlY29kZXI6OmRlY29kZUVudW0pOgorICAgICAgICAoV1RGOjpEZWNvZGVy
OjpkZWNvZGUpOgorICAgICAgICAoV1RGOjpEZWNvZGVyOjpidWZmZXJJc0xhcmdlRW5vdWdoVG9D
b250YWluIGNvbnN0KToKKworICAgICAgICAqIHd0Zi9tZW1vcnkvRW5jb2Rlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV1RGOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKFdURjo6RW5jb2Rl
cjo6fkVuY29kZXIpOgorICAgICAgICAoV1RGOjpFbmNvZGVyOjpncm93KToKKyAgICAgICAgKFdU
Rjo6RW5jb2Rlcjo6ZW5jb2RlRml4ZWRMZW5ndGhEYXRhKToKKyAgICAgICAgKFdURjo6RW5jb2Rl
cjo6ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKFdURjo6RW5jb2Rlcjo6ZW5jb2RlKToKKyAgICAg
ICAgKiB3dGYvbWVtb3J5L0VuY29kZXIuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkVuY29kZXI6
OmVuY29kZUVudW0pOgorICAgICAgICAoV1RGOjpFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAo
V1RGOjpFbmNvZGVyOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdURjo6RW5jb2Rlcjo6YnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdURjo6RW5jb2Rlcjo6YnVmZmVyU2l6ZSBjb25zdCk6CisKKzIw
MTctMDgtMTAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAgICAgIFJl
bmFtZSB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgV1RGIHBlcnNpc3RlbnQgY29kZXJzLgogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDQxCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY2ZWIwMDg3NjA5NDU2
ZjJjYzBkNDRlZWY0MjViODQ0NTVjZTA0MGYuLjdkZTBlOTIxNGViOWQ2NjMwNzQ4ZTEwYzkyYzZi
MWMwMTI4MWY4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNjYsNiArNjYsOSBAQAogCQk1MUYxNzUyQjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVu
dENvZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUYxNzUyNjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgKi87IH07
CiAJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUyNzFGM0Q0
ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwICovOyB9OwogCQk1MUYxNzUyRDFG
M0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMTc1MjkxRjNENDg2MDAwQzc0OTUwIC8q
IFBlcnNpc3RlbnRFbmNvZGVyLmNwcCAqLzsgfTsKKwkJNTFGMTc1MzcxRjNENEI2NDAwQzc0OTUw
IC8qIENvZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUYxNzUzMTFGM0Q0QjY0MDBDNzQ5NTAgLyogQ29kZXJzLmNwcCAqLzsgfTsKKwkJNTFG
MTc1MzgxRjNENEI2NDAwQzc0OTUwIC8qIERlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMTc1MzMxRjNENEI2NDAwQzc0OTUwIC8qIERl
Y29kZXIuY3BwICovOyB9OworCQk1MUYxNzUzOTFGM0Q0QjY0MDBDNzQ5NTAgLyogRW5jb2Rlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYxNzUz
NTFGM0Q0QjY0MDBDNzQ5NTAgLyogRW5jb2Rlci5jcHAgKi87IH07CiAJCTUyMTgzMDEyQzk5RTQ3
NkE4NEVFQkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBs
LmNwcCAqLzsgfTsKIAkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTExRUE3
MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OwogCQk1MzExQkQ1QzFFQTgyMkY5MDA1
MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2Fn
ZS5jcHAgKi87IH07CkBAIC0zMTAsNiArMzEzLDEzIEBACiAJCTUxRjE3NTI4MUYzRDQ4NjAwMEM3
NDk1MCAvKiBQZXJzaXN0ZW50RGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQZXJzaXN0ZW50RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUYxNzUyOTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudEVuY29kZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGVyc2lzdGVudEVuY29kZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUYxNzUyQTFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVy
c2lzdGVudEVuY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lz
dGVudEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzAxRjNE
NEI2NDAwQzc0OTUwIC8qIENvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjE3NTMxMUYzRDRCNjQw
MEM3NDk1MCAvKiBDb2RlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzIxRjNE
NEI2NDAwQzc0OTUwIC8qIENvZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzMxRjNENEI2
NDAwQzc0OTUwIC8qIERlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRjE3NTM0
MUYzRDRCNjQwMEM3NDk1MCAvKiBEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFGMTc1MzUx
RjNENEI2NDAwQzc0OTUwIC8qIEVuY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRW5jb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUx
RjE3NTM2MUYzRDRCNjQwMEM3NDk1MCAvKiBFbmNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVuY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMx
MUJENTExRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2lnbmFscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzMTFCRDU1MUVBN0UxNUEwMDUyNTI4MSAvKiBMb2NrbGVzc0JhZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrbGVzc0JhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzExQkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC02NDMsNiArNjUzLDIwIEBACiAJCQlwYXRoID0gZGFyd2luOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTFGMTc1MkYxRjNENEIzMzAwQzc0OTUwIC8qIG1l
bW9yeSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFG
MTc1MzAxRjNENEI2NDAwQzc0OTUwIC8qIENvZGVyLmggKi8sCisJCQkJNTFGMTc1MzExRjNENEI2
NDAwQzc0OTUwIC8qIENvZGVycy5jcHAgKi8sCisJCQkJNTFGMTc1MzIxRjNENEI2NDAwQzc0OTUw
IC8qIENvZGVycy5oICovLAorCQkJCTUxRjE3NTMzMUYzRDRCNjQwMEM3NDk1MCAvKiBEZWNvZGVy
LmNwcCAqLywKKwkJCQk1MUYxNzUzNDFGM0Q0QjY0MDBDNzQ5NTAgLyogRGVjb2Rlci5oICovLAor
CQkJCTUxRjE3NTM1MUYzRDRCNjQwMEM3NDk1MCAvKiBFbmNvZGVyLmNwcCAqLywKKwkJCQk1MUYx
NzUzNjFGM0Q0QjY0MDBDNzQ5NTAgLyogRW5jb2Rlci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBt
ZW1vcnk7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDI0N0I1NzE0Njg5
Qjg2MDBFNzhCNzYgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
NzE3LDYgKzc0MSw3IEBACiAJCQkJQThBNDcyODExNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EgKi8s
CiAJCQkJMUZBNDdDODcxNTI1MDJEQTAwNTY4RDFCIC8qIGlvcyAqLywKIAkJCQlBOEE0NzJDNDE1
MUE4MjVBMDA0MTIzRkYgLyogbWFjICovLAorCQkJCTUxRjE3NTJGMUYzRDRCMzMwMEM3NDk1MCAv
KiBtZW1vcnkgKi8sCiAJCQkJRTQzQTQ2ODUxRTIyOEI1NzAwMjc2QjA1IC8qIHBlcnNpc3RlbmNl
ICovLAogCQkJCUNFRjQ4MjBDMTlEQTM0NzYwMENDMDRCOCAvKiBzcGkgKi8sCiAJCQkJQThBNDcz
MUIxNTFBODI1QjAwNDEyM0ZGIC8qIHRleHQgKi8sCkBAIC04MzgsOCArODYzLDggQEAKIAkJCQkw
RkY0QjRDNDFFODg5MzlDMDBEQkJFODYgLyogTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkUxNjQ2ODFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAw
RTdDIC8qIExvY2suaCAqLywKLQkJCQkwRjMxREQ3MDFGMTMwOEJDMDA3MkVCNEEgLyogTG9ja0Fs
Z29yaXRobUlubGluZXMuaCAqLywKIAkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9j
a0FsZ29yaXRobS5oICovLAorCQkJCTBGMzFERDcwMUYxMzA4QkMwMDcyRUI0QSAvKiBMb2NrQWxn
b3JpdGhtSW5saW5lcy5oICovLAogCQkJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2Nr
ZWRQcmludFN0cmVhbS5jcHAgKi8sCiAJCQkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZDIC8qIExv
Y2tlZFByaW50U3RyZWFtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExv
Y2tlci5oICovLApAQCAtMTMxMiwxNiArMTMzNywxNCBAQAogCQkJCUE4QTQ3M0E4MTUxQTgyNUIw
MDQxMjNGRiAvKiBiaWdudW0tZHRvYS5jYyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0FBMTUx
QTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uY2MgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ1MTE1
MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTUxRjE3NTJEMUYzRDQ4NjAwMEM3NDk1MCAvKiBQZXJzaXN0ZW50RW5jb2Rlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzM4QjE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUEzRTRERDkzMUYzQTgwMzQwMERFRDBCNCAvKiBUZXh0U3RyZWFt
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAxMUNFQTc1NTEwMDBDMjM5NiAvKiBCbG9j
a09iakNFeGNlcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQUMxNTFBODI1QjAw
NDEyM0ZGIC8qIGNhY2hlZC1wb3dlcnMuY2MgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2QjI4QTFE
Qzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxRjE3
NTM3MUYzRDRCNjQwMEM3NDk1MCAvKiBDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0NjAxNTFBODI1QjAwNDEyM0ZGIC8qIENvbGxhdG9yRGVmYXVsdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBOEE0NzQ2MzE1MUE4MjVCMDA0MTIzRkYgLyogQ29sbGF0b3JJQ1UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4RjJCOTIxNzJFMDEwMzAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRjE3NTJDMUYzRDQ4NjAwMEM3NDk1MCAvKiBQ
ZXJzaXN0ZW50RGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhDNDEyODFFQjRFMDY4
MDA0Mjk1N0QgLyogQ1BVVGltZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzhDNDEyNTFFQjRF
MDRDMDA0Mjk1N0QgLyogQ1BVVGltZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE1Rjc5
NEUxQ0ZDOUY0QTAwQ0NFRDkzIC8qIENyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMTMzMiwyMyArMTM1NSwyNCBAQAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQxMjNGRiAv
KiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIwMDQxMjNG
RiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNBMjE1MUE4MjVCMDA0
MTIzRkYgLyogRGVjaW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUYxNzUzODFG
M0Q0QjY0MDBDNzQ5NTAgLyogRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNBREQ4
NDE4ODQ0ODAxMDBEOEI3MUQgLyogRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0gaW4g
U291cmNlcyAqLywKIAkJCQlBOEE0NzNBRTE1MUE4MjVCMDA0MTIzRkYgLyogZGl5LWZwLmNjIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQjAxNTFBODI1QjAwNDEyM0ZGIC8qIGRvdWJsZS1jb252
ZXJzaW9uLmNjIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQkExNTFBODI1QjAwNDEyM0ZGIC8q
IGR0b2EuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFGMTc1MkIxRjNENDg2MDAwQzc0OTUwIC8q
IFBlcnNpc3RlbnRDb2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFGMTc1MzkxRjNENEI2
NDAwQzc0OTUwIC8qIEVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQjMxNTFB
ODI1QjAwNDEyM0ZGIC8qIGZhc3QtZHRvYS5jYyBpbiBTb3VyY2VzICovLAogCQkJCTBGN0M1RkI2
MUQ4ODVDRjIwMDQ0RjVFMiAvKiBGYXN0Qml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QTQ3M0MzMTUxQTgyNUIwMDQxMjNGRiAvKiBGYXN0TWFsbG9jLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOUQzMzYwMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQjUxNTFBODI1QjAwNDEyM0ZGIC8qIGZpeGVkLWR0b2Eu
Y2MgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEOEI5RTE3MzE4Nzk4MDAxNDFEQTQgLyogRnVuY3Rp
b25EaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTc2MUYyM0Q0OUEwMDI5
RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMwQkE5MDFFNzg3MDhF
MDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0NEODky
QTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDczRDgxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjYwRjMyRjFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFQzNDNUUxRjM2OEE5NzAwRjU5QjZDIC8qIFJlYWRX
cml0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJG
IC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNFNTE1MUE4
MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzNF
NDE1MUE4MjVCMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAt
MTM2NSwxMSArMTM4OSwxNSBAQAogCQkJCUE4QTQ3NDAyMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdl
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8q
IFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjgyNEE2ODFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUYxNzUy
QjFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MUYxNzUyQzFGM0Q0ODYwMDBDNzQ5NTAgLyogUGVyc2lzdGVudERlY29kZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTFGMTc1MkQxRjNENDg2MDAwQzc0OTUwIC8qIFBlcnNpc3RlbnRF
bmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURDRUUyMjAzMUNFQTc1NTEwMDBDMjM5NiAv
KiBQbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXNNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkwRjlEMzM2MjE2NURCQTczMDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUMzQzVFMUYzNjhBOTcwMEY1OUI2QyAvKiBS
ZWFkV3JpdGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQx
MjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNE
RUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTEzODksNyArMTQxNyw2IEBACiAJCQkJQThBNDc0NDAxNTFBODI1QjAwNDEyM0ZGIC8qIFN0
cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RkMxODI0MzVBNjAwQTgyRTY5
IC8qIFN0cmluZ0ltcGxDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVGNTE4MjQzNDgw
MDBBODJFNjkgLyogU3RyaW5nSW1wbE1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTBGNUJGMTc2
MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJB
MTVGMzE4MjQzM0E5MDBBODJFNjkgLyogU3RyaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5OTNFMTlENzk1OEQwMEMyMzkwQiAvKiBTdHJpbmdWaWV3LmNwcCBp
biBTb3VyY2VzICovLApAQCAtMTQwMCw5ICsxNDI3LDEwIEBACiAJCQkJNzBBOTkzRkUxQUQ3MTUx
MzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDMTgx
QzdGMUQzMDc4REEwMEY1RkExNiAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQzE4MUM5NjFEMzA4MDBBMDBGNUZBMTYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRl
cm5hbElDVU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUEzRTRERDkzMUYzQTgwMzQwMERFRDBC
NCAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUzMTFGQjE3MUYwQTU2OEIw
MDNDMDhERSAvKiBUaHJlYWRHcm91cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3
NDRFMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlFMzExRkIxNzFGMEE1NjhCMDAzQzA4REUgLyogVGhyZWFkR3JvdXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NkIyOTAxREM5N0JBQjAwNEExRDNGIC8qIFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzE4MUM4RjFEMzA3
QUI4MDBGNUZBMTYgLyogVVRleHRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKaW5kZXggZmEyYjYxNjYwN2JkZjgyMTUyODVkMDhkZDcxNmI1ZGI4MGE4MTA4ZC4u
NWVkMTMwMDc1YTk2OTgzM2I2NjM1MjE1YWRiZTA0OWQxZDEyMzIwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTI3Miw2ICsyNzIsMTAgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgZHRvYS9maXhl
ZC1kdG9hLmNjCiAgICAgZHRvYS9zdHJ0b2QuY2MKIAorICAgIG1lbW9yeS9Db2RlcnMuY3BwCisg
ICAgbWVtb3J5L0RlY29kZXIuY3BwCisgICAgbWVtb3J5L0VuY29kZXIuY3BwCisKICAgICBwZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmNwcAogICAgIHBlcnNpc3RlbmNlL1BlcnNpc3RlbnRE
ZWNvZGVyLmNwcAogICAgIHBlcnNpc3RlbmNlL1BlcnNpc3RlbnRFbmNvZGVyLmNwcApAQCAtMzEx
LDYgKzMxNSw3IEBAIHNldChXVEZfSU5DTFVERV9ESVJFQ1RPUklFUwogc2V0KFdURl9QUklWQVRF
X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXVEZfRElSfS93dGYiCiAgICAgIiR7V1RGX0RJ
Un0vd3RmL2R0b2EiCisgICAgIiR7V1RGX0RJUn0vd3RmL21lbW9yeSIKICAgICAiJHtXVEZfRElS
fS93dGYvcGVyc2lzdGVuY2UiCiAgICAgIiR7V1RGX0RJUn0vd3RmL3RleHQiCiAgICAgIiR7V1RG
X0RJUn0vd3RmL3RleHQvaWN1IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWVtb3J5L0Nv
ZGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkvQ29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYThkZjRk
YjUzYjgyNjA2YWI2ZjQ4NDdhMzg2MmQ5NDUxODIyM2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dURi93dGYvbWVtb3J5L0NvZGVyLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgRGVjb2RlcjsK
K2NsYXNzIEVuY29kZXI7CisgICAgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29kZXIg
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBUJiB0KQor
ICAgIHsKKyAgICAgICAgdC5lbmNvZGUoZW5jb2Rlcik7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFQmIHQpCisgICAgeworICAgICAgICByZXR1cm4g
VDo6ZGVjb2RlKGRlY29kZXIsIHQpOworICAgIH0KK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL21lbW9yeS9Db2RlcnMuY3BwIGIvU291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVy
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGJjZDI0ODlhZjc4NjFlNjM5MDU3YWFjYTlmZmIyYjI0NjhhMGQz
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9Db2RlcnMuY3BwCkBA
IC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ29kZXJzLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIENvZGVyPEF0b21pY1N0cmluZz46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBB
dG9taWNTdHJpbmcmIGF0b21pY1N0cmluZykKK3sKKyAgICBlbmNvZGVyIDw8IGF0b21pY1N0cmlu
Zy5zdHJpbmcoKTsKK30KKworYm9vbCBDb2RlcjxBdG9taWNTdHJpbmc+OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgQXRvbWljU3RyaW5nJiBhdG9taWNTdHJpbmcpCit7CisgICAgU3RyaW5nIHN0
cmluZzsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0cmluZykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF0b21pY1N0cmluZyA9IHN0cmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDb2RlcjxDU3RyaW5nPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IENT
dHJpbmcmIHN0cmluZykKK3sKKyAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG51bGwgc3RyaW5nLgor
ICAgIGlmIChzdHJpbmcuaXNOdWxsKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB1aW50MzJfdCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgZW5jb2RlciA8PCBsZW5n
dGg7CisgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4oc3RyaW5nLmRhdGEoKSksIGxlbmd0aCk7Cit9CisKK2Jvb2wgQ29kZXI8
Q1N0cmluZz46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBDU3RyaW5nJiByZXN1bHQpCit7Cisg
ICAgdWludDMyX3QgbGVuZ3RoOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUobGVuZ3RoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGxlbmd0aCA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbnVsbCBzdHJp
bmcuCisgICAgICAgIHJlc3VsdCA9IENTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFrZSBzdXJlIHRo
YXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFkZWNvZGVyLmJ1
ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Y2hhcj4obGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY2hhciogYnVmZmVyOworICAgIENTdHJpbmcgc3RyaW5nID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIpLCBs
ZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSBzdHJpbmc7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKwordm9pZCBDb2RlcjxTdHJpbmc+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgLy8gU3BlY2lhbCBjYXNl
IHRoZSBudWxsIHN0cmluZy4KKyAgICBpZiAoc3RyaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwor
ICAgIGJvb2wgaXM4Qml0ID0gc3RyaW5nLmlzOEJpdCgpOworCisgICAgZW5jb2RlciA8PCBsZW5n
dGggPDwgaXM4Qml0OworCisgICAgaWYgKGlzOEJpdCkKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVG
aXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc3RyaW5nLmNo
YXJhY3RlcnM4KCkpLCBsZW5ndGggKiBzaXplb2YoTENoYXIpKTsKKyAgICBlbHNlCisgICAgICAg
IGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHN0cmluZy5jaGFyYWN0ZXJzMTYoKSksIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9v
bCBkZWNvZGVTdHJpbmdUZXh0KERlY29kZXImIGRlY29kZXIsIHVpbnQzMl90IGxlbmd0aCwgU3Ry
aW5nJiByZXN1bHQpCit7CisgICAgLy8gQmVmb3JlIGFsbG9jYXRpbmcgdGhlIHN0cmluZywgbWFr
ZSBzdXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyIGlzIGJpZyBlbm91Z2guCisgICAgaWYgKCFk
ZWNvZGVyLmJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW48Q2hhcmFjdGVyVHlwZT4obGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2hhcmFjdGVyVHlwZSogYnVmZmVyOwor
ICAgIFN0cmluZyBzdHJpbmcgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOworICAgIGlmICghZGVjb2Rlci5kZWNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyKSwgbGVuZ3RoICogc2l6ZW9mKENoYXJhY3RlclR5cGUp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9IHN0cmluZzsKKyAg
ICByZXR1cm4gdHJ1ZTsgICAgCit9CisKK2Jvb2wgQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIsIFN0cmluZyYgcmVzdWx0KQoreworICAgIHVpbnQzMl90IGxlbmd0aDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChsZW5ndGggPT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7
CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIG51bGwgc3RyaW5nLgorICAgICAgICByZXN1bHQgPSBT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpczhCaXQ7
CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpczhCaXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoaXM4Qml0KQorICAgICAgICByZXR1cm4gZGVjb2RlU3RyaW5nVGV4dDxMQ2hh
cj4oZGVjb2RlciwgbGVuZ3RoLCByZXN1bHQpOworICAgIHJldHVybiBkZWNvZGVTdHJpbmdUZXh0
PFVDaGFyPihkZWNvZGVyLCBsZW5ndGgsIHJlc3VsdCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL21lbW9yeS9Db2RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9Db2Rl
cnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43YTg3NjAwZjQxN2RiZTdhZWQ2MjY3NWFmNTk3NDA4YTMwYTRjOTEx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWVtb3J5L0NvZGVycy5oCkBAIC0w
LDAgKzEsMzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NlY29u
ZHMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL21lbW9yeS9EZWNv
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL21lbW9yeS9FbmNvZGVyLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdHJ1Y3QgQ29kZXI8c3RkOjpw
YWlyPFQsIFU+PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IHN0ZDo6cGFpcjxULCBVPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgcGFp
ci5maXJzdCA8PCBwYWlyLnNlY29uZDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
RGVjb2RlciYgZGVjb2Rlciwgc3RkOjpwYWlyPFQsIFU+JiBwYWlyKQorICAgIHsKKyAgICAgICAg
VCBmaXJzdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShmaXJzdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVSBzZWNvbmQ7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUoc2Vjb25kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBw
YWlyLmZpcnN0ID0gZmlyc3Q7CisgICAgICAgIHBhaXIuc2Vjb25kID0gc2Vjb25kOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXAsIHR5cGVu
YW1lIFBlcmlvZD4gc3RydWN0IENvZGVyPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlv
ZD4+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3Rk
OjpjaHJvbm86OmR1cmF0aW9uPFJlcCwgUGVyaW9kPiYgZHVyYXRpb24pCisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfaW50ZWdyYWw8UmVwPjo6dmFsdWUgJiYgc3RkOjppc19z
aWduZWQ8UmVwPjo6dmFsdWUgJiYgc2l6ZW9mKFJlcCkgPD0gc2l6ZW9mKGludDY0X3QpLCAiU2Vy
aWFsaXphdGlvbiBvZiB0aGlzIFJlcCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBPbmx5IHNp
Z25lZCBpbnRlZ2VyIHR5cGUgd2hpY2ggY2FuIGJlIGZpdCBpbiBhbiBpbnQ2NF90IGlzIGN1cnJl
bnRseSBzdXBwb3J0ZWQuIik7CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZHVyYXRpb24uY291bnQoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERl
Y29kZXImIGRlY29kZXIsIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxSZXAsIFBlcmlvZD4mIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIGludDY0X3QgY291bnQ7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXN1bHQg
PSBzdGQ6OmNocm9ubzo6ZHVyYXRpb248UmVwLCBQZXJpb2Q+KHN0YXRpY19jYXN0PFJlcD4oY291
bnQpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvZGVyPHN0ZDo6b3B0aW9uYWw8VD4+IHsKKyAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwp
CisgICAgeworICAgICAgICBpZiAoIW9wdGlvbmFsKSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBlbmNvZGVyIDw8IHRydWU7CisgICAgICAgIGVuY29kZXIgPDwgb3B0aW9uYWwudmFsdWUoKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIHN0
ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgYm9vbCBpc0VuZ2FnZWQ7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFbmdhZ2VkKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNFbmdhZ2VkKSB7CisgICAgICAg
ICAgICBvcHRpb25hbCA9IHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUIHZhbHVlOworICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIG9wdGlvbmFsID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlw
ZT4gc3RydWN0IENvZGVyPFdURjo6S2V5VmFsdWVQYWlyPEtleVR5cGUsIFZhbHVlVHlwZT4+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV1RGOjpLZXlW
YWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPiYgcGFpcikKKyAgICB7CisgICAgICAgIGVuY29k
ZXIgPDwgcGFpci5rZXkgPDwgcGFpci52YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV1RGOjpLZXlWYWx1ZVBhaXI8S2V5VHlwZSwgVmFsdWVU
eXBlPiYgcGFpcikKKyAgICB7CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGtleSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
VmFsdWVUeXBlIHZhbHVlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBwYWlyLmtleSA9IGtleTsKKyAgICAg
ICAgcGFpci52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTxib29sIGZpeGVkU2l6ZUVsZW1lbnRzLCB0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+IHN0cnVjdCBWZWN0b3JDb2RlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8ZmFsc2UsIFQsIGlubGlu
ZUNhcGFjaXR5PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGVu
Y29kZXIgPDwgdmVjdG9yW2ldOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNv
ZGVyJiBkZWNvZGVyLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICB1aW50NjRfdCBzaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4gdG1wOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAgICAgVCBlbGVtZW50OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShlbGVtZW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHRtcC5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgIH0KKwor
ICAgICAgICB0bXAuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgdmVjdG9yLnN3YXAodG1wKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwgaW5saW5lQ2Fw
YWNpdHk+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7CisgICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIHVpbnQ2NF90
IHNpemU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2luY2Ugd2Uga25vdyB0aGUgdG90YWwgc2l6ZSBv
ZiB0aGUgZWxlbWVudHMsIHdlIGNhbiBhbGxvY2F0ZSB0aGUgdmVjdG9yIGluCisgICAgICAgIC8v
IG9uZSBmZWxsIHN3b29wLiBCZWZvcmUgYWxsb2NhdGluZyB3ZSBtdXN0IGhvd2V2ZXIgbWFrZSBz
dXJlIHRoYXQgdGhlIGRlY29kZXIgYnVmZmVyCisgICAgICAgIC8vIGlzIGJpZyBlbm91Z2guCisg
ICAgICAgIGlmICghZGVjb2Rlci5idWZmZXJJc0xhcmdlRW5vdWdoVG9Db250YWluPFQ+KHNpemUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZlY3RvcjxULCBpbmxpbmVD
YXBhY2l0eT4gdGVtcDsKKyAgICAgICAgdGVtcC5ncm93KHNpemUpOworCisgICAgICAgIGRlY29k
ZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRlbXAu
ZGF0YSgpKSwgc2l6ZSAqIHNpemVvZihUKSk7CisKKyAgICAgICAgdmVjdG9yLnN3YXAodGVtcCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IENvZGVyPFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eT4+IDogVmVjdG9yQ29kZXI8c3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgVCwgaW5s
aW5lQ2FwYWNpdHk+IHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5QXJnLCB0eXBlbmFtZSBN
YXBwZWRBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVuYW1lIEtleVRyYWl0c0FyZywgdHlwZW5h
bWUgTWFwcGVkVHJhaXRzQXJnPiBzdHJ1Y3QgQ29kZXI8SGFzaE1hcDxLZXlBcmcsIE1hcHBlZEFy
ZywgSGFzaEFyZywgS2V5VHJhaXRzQXJnLCBNYXBwZWRUcmFpdHNBcmc+PiB7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPEtleUFyZywgTWFwcGVkQXJnLCBIYXNoQXJnLCBLZXlUcmFpdHNBcmcsIE1hcHBl
ZFRyYWl0c0FyZz4gSGFzaE1hcFR5cGU7CisKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgeworICAgICAgICBl
bmNvZGVyIDw8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihoYXNoTWFwLnNpemUoKSk7CisgICAgICAg
IGZvciAodHlwZW5hbWUgSGFzaE1hcFR5cGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGFzaE1hcC5i
ZWdpbigpLCBlbmQgPSBoYXNoTWFwLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAg
ICBlbmNvZGVyIDw8ICppdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgSGFzaE1hcFR5cGUmIGhhc2hNYXApCisgICAgeworICAgICAgICB1aW50NjRf
dCBoYXNoTWFwU2l6ZTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShoYXNoTWFwU2l6ZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgSGFzaE1hcFR5cGUgdGVtcEhh
c2hNYXA7CisgICAgICAgIGZvciAodWludDY0X3QgaSA9IDA7IGkgPCBoYXNoTWFwU2l6ZTsgKytp
KSB7CisgICAgICAgICAgICBLZXlBcmcga2V5OworICAgICAgICAgICAgTWFwcGVkQXJnIHZhbHVl
OworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShrZXkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCF0ZW1wSGFz
aE1hcC5hZGQoa2V5LCB2YWx1ZSkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgIC8vIFRo
ZSBoYXNoIG1hcCBhbHJlYWR5IGhhcyB0aGUgc3BlY2lmaWVkIGtleSwgYmFpbC4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBoYXNoTWFwLnN3YXAodGVtcEhhc2hNYXApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlBcmcsIHR5cGVuYW1lIEhhc2hBcmcsIHR5cGVu
YW1lIEtleVRyYWl0c0FyZz4gc3RydWN0IENvZGVyPEhhc2hTZXQ8S2V5QXJnLCBIYXNoQXJnLCBL
ZXlUcmFpdHNBcmc+PiB7CisgICAgdHlwZWRlZiBIYXNoU2V0PEtleUFyZywgSGFzaEFyZywgS2V5
VHJhaXRzQXJnPiBIYXNoU2V0VHlwZTsKKworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKKyAgICB7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGhhc2hTZXQuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh0eXBlbmFtZSBIYXNoU2V0VHlwZTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoU2V0LmJl
Z2luKCksIGVuZCA9IGhhc2hTZXQuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgKml0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBIYXNoU2V0VHlwZSYgaGFzaFNldCkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90
IGhhc2hTZXRTaXplOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhhc2hTZXRTaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBIYXNoU2V0VHlwZSB0ZW1wSGFz
aFNldDsKKyAgICAgICAgZm9yICh1aW50NjRfdCBpID0gMDsgaSA8IGhhc2hTZXRTaXplOyArK2kp
IHsKKyAgICAgICAgICAgIEtleUFyZyBrZXk7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBp
ZiAoIXRlbXBIYXNoU2V0LmFkZChrZXkpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGUgaGFzaCBtYXAgYWxyZWFkeSBoYXMgdGhlIHNwZWNpZmllZCBrZXksIGJhaWwuCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaGFzaFNldC5zd2FwKHRlbXBIYXNoU2V0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8c3RkOjpjaHJvbm86OnN5c3RlbV9j
bG9jazo6dGltZV9wb2ludD4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNv
ZGVyLCBjb25zdCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50JiB0aW1lUG9p
bnQpCisgICAgeworICAgICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PGludDY0X3Q+KHRpbWVQ
b2ludC50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojp0aW1lX3BvaW50JiByZXN1bHQpCisgICAgeworICAgICAgICBpbnQ2NF90IHRpbWU7CisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGltZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgcmVzdWx0ID0gc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2lu
dChzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpkdXJhdGlvbihzdGF0aWNfY2FzdDxzdGQ6OmNo
cm9ubzo6c3lzdGVtX2Nsb2NrOjpyZXA+KHRpbWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvZGVyPFNlY29uZHM+IHsKKyAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgU2Vjb25kcyYgc2Vjb25kcykK
KyAgICB7CisgICAgICAgIGVuY29kZXIgPDwgc2Vjb25kcy52YWx1ZSgpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBTZWNvbmRzJiByZXN1bHQpCisg
ICAgeworICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IFNl
Y29uZHModmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb2RlcjxBdG9taWNTdHJpbmc+IHsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImLCBBdG9taWNTdHJp
bmcmKTsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvZGVyPENTdHJpbmc+IHsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBjb25zdCBDU3RyaW5n
Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwg
Q1N0cmluZyYpOworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8U3RyaW5nPiB7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVyJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVy
JiwgU3RyaW5nJik7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkv
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkvRGVjb2Rlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGM4OTM3ZTdjMzdlNDNiNjVmOWMzYTQ1MzIyYTA1OTVhZDdiOTBjNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9EZWNvZGVyLmNwcApAQCAtMCwwICsxLDExNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvbWVtb3J5L0VuY29kZXIuaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK0RlY29kZXI6OkRlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXpl
X3QgYnVmZmVyU2l6ZSkKKyAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyAgICAsIG1fYnVmZmVyUG9z
aXRpb24oYnVmZmVyKQorICAgICwgbV9idWZmZXJFbmQoYnVmZmVyICsgYnVmZmVyU2l6ZSkKK3sK
K30KKworRGVjb2Rlcjo6fkRlY29kZXIoKQoreworfQorCitib29sIERlY29kZXI6OmJ1ZmZlcklz
TGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90IHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNp
emUgPD0gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2J1ZmZlckVuZCAtIG1fYnVmZmVyUG9zaXRpb24p
OworfQorCitib29sIERlY29kZXI6OmRlY29kZUZpeGVkTGVuZ3RoRGF0YSh1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoIWJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4o
c2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1lbWNweShkYXRhLCBtX2J1ZmZl
clBvc2l0aW9uLCBzaXplKTsKKyAgICBtX2J1ZmZlclBvc2l0aW9uICs9IHNpemU7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK2Jvb2wgRGVjb2Rlcjo6
ZGVjb2RlTnVtYmVyKFR5cGUmIHZhbHVlKQoreworICAgIGlmICghYnVmZmVySXNMYXJnZUVub3Vn
aFRvQ29udGFpbihzaXplb2YodmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bWVtY3B5KCZ2YWx1ZSwgbV9idWZmZXJQb3NpdGlvbiwgc2l6ZW9mKHZhbHVlKSk7CisgICAgbV9i
dWZmZXJQb3NpdGlvbiArPSBzaXplb2YoVHlwZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBEZWNvZGVyOjpkZWNvZGUoYm9vbCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVO
dW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUodWludDhfdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVy
OjpkZWNvZGUodWludDE2X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVtYmVyKHJl
c3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKHVpbnQzMl90JiByZXN1bHQpCit7Cisg
ICAgcmV0dXJuIGRlY29kZU51bWJlcihyZXN1bHQpOworfQorCitib29sIERlY29kZXI6OmRlY29k
ZSh1aW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsK
K30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVy
biBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9vbCBEZWNvZGVyOjpkZWNvZGUoaW50NjRf
dCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworYm9v
bCBEZWNvZGVyOjpkZWNvZGUoZmxvYXQmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlTnVt
YmVyKHJlc3VsdCk7Cit9CisKK2Jvb2wgRGVjb2Rlcjo6ZGVjb2RlKGRvdWJsZSYgcmVzdWx0KQor
eworICAgIHJldHVybiBkZWNvZGVOdW1iZXIocmVzdWx0KTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvbWVtb3J5L0RlY29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9E
ZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ2MjE5ZGM1ZDkxN2RmMTUzZDkzZGU3OGQ2OGQ0ODg1MGNk
Mzg0MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9EZWNvZGVyLmgK
QEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL21lbW9yeS9Db2Rlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgRGVjb2RlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIERlY29kZXIoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5EZWNvZGVyKCk7CisKKyAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJFbmQgLSBtX2J1ZmZlcjsgfQorICAgIHNpemVfdCBj
dXJyZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXJQb3NpdGlvbiAtIG1fYnVmZmVy
OyB9CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGVGaXhlZExlbmd0aERhdGEo
dWludDhfdCosIHNpemVfdCk7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUo
Ym9vbCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZSh1aW50OF90Jik7Cisg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKHVpbnQxNl90Jik7CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgZGVjb2RlKHVpbnQzMl90Jik7CisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIGJvb2wgZGVjb2RlKHVpbnQ2NF90Jik7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
ZGVjb2RlKGludDMyX3QmKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBkZWNvZGUoaW50
NjRfdCYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShmbG9hdCYpOworICAg
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGRlY29kZShkb3VibGUmKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGJvb2wgZGVjb2RlRW51bShUJiByZXN1bHQpCisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihUKSA8PSA4LCAiRW51bSB0eXBlIFQgbXVzdCBub3QgYmUgbGFy
Z2VyIHRoYW4gNjQgYml0cyEiKTsKKworICAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICAg
aWYgKCFkZWNvZGUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGRlY29kZShUJiB0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvZGVyPFQ+OjpkZWNvZGUoKnRoaXMsIHQpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBidWZmZXJJc0xhcmdlRW5v
dWdoVG9Db250YWluKHNpemVfdCBudW1FbGVtZW50cykgY29uc3QKKyAgICB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgIlR5cGUgVCBtdXN0IGhh
dmUgYSBmaXhlZCwga25vd24gZW5jb2RlZCBzaXplISIpOworCisgICAgICAgIGlmIChudW1FbGVt
ZW50cyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLyBzaXplb2YoVCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcklzTGFyZ2VF
bm91Z2hUb0NvbnRhaW4obnVtRWxlbWVudHMgKiBzaXplb2YoVCkpOworICAgIH0KKworICAgIHN0
YXRpYyBjb25zdCBib29sIGlzSVBDRGVjb2RlciA9IGZhbHNlOworCitwcml2YXRlOgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBib29sIGJ1ZmZlcklzTGFyZ2VFbm91Z2hUb0NvbnRhaW4oc2l6ZV90
KSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPiBib29sIGRlY29kZU51bWJlcihU
eXBlJik7CisKKyAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICBjb25zdCB1aW50OF90
KiBtX2J1ZmZlclBvc2l0aW9uOworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyRW5kOworfTsK
KworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tZW1vcnkvRW5jb2Rlci5jcHAgYi9T
b3VyY2UvV1RGL3d0Zi9tZW1vcnkvRW5jb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTFiODE4Yjk2Y2Yz
MDkzZDVhMmE5OThlNmY3ZDQyYWJkOGFiZjY3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
VEYvd3RmL21lbW9yeS9FbmNvZGVyLmNwcApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCitFbmNvZGVyOjpFbmNvZGVyKCkKK3sKK30KKworRW5jb2Rlcjo6fkVuY29k
ZXIoKQoreworfQorCit1aW50OF90KiBFbmNvZGVyOjpncm93KHNpemVfdCBzaXplKQoreworICAg
IHNpemVfdCBuZXdQb3NpdGlvbiA9IG1fYnVmZmVyLnNpemUoKTsKKyAgICBtX2J1ZmZlci5ncm93
KG1fYnVmZmVyLnNpemUoKSArIHNpemUpOworICAgIHJldHVybiBtX2J1ZmZlci5kYXRhKCkgKyBu
ZXdQb3NpdGlvbjsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGVGaXhlZExlbmd0aERhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgdWludDhfdCogYnVmZmVyID0g
Z3JvdyhzaXplKTsKKyAgICBtZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKFR5cGUgdmFsdWUp
Cit7CisgICAgdWludDhfdCogYnVmZmVyID0gZ3JvdyhzaXplb2YoVHlwZSkpOworICAgIG1lbWNw
eShidWZmZXIsICZ2YWx1ZSwgc2l6ZW9mKFR5cGUpKTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNv
ZGUoYm9vbCB2YWx1ZSkKK3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVu
Y29kZXI6OmVuY29kZSh1aW50OF90IHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7
Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQxNl90IHZhbHVlKQoreworICAgIGVuY29k
ZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2RlKHVpbnQzMl90IHZhbHVl
KQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQgRW5jb2Rlcjo6ZW5jb2Rl
KHVpbnQ2NF90IHZhbHVlKQoreworICAgIGVuY29kZU51bWJlcih2YWx1ZSk7Cit9CisKK3ZvaWQg
RW5jb2Rlcjo6ZW5jb2RlKGludDMyX3QgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVl
KTsKK30KKwordm9pZCBFbmNvZGVyOjplbmNvZGUoaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBlbmNv
ZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShmbG9hdCB2YWx1ZSkK
K3sKKyAgICBlbmNvZGVOdW1iZXIodmFsdWUpOworfQorCit2b2lkIEVuY29kZXI6OmVuY29kZShk
b3VibGUgdmFsdWUpCit7CisgICAgZW5jb2RlTnVtYmVyKHZhbHVlKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvbWVtb3J5L0VuY29kZXIuaCBiL1NvdXJjZS9XVEYvd3RmL21l
bW9yeS9FbmNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDdmMjEyOTkxYWJmOTQ0NDNkZTZmZWFjMjAwYmYy
ODA2NDBkZDFkYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21lbW9yeS9FbmNv
ZGVyLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9tZW1vcnkvQ29kZXIuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIEVuY29kZXI7CisKK2NsYXNzIEVuY29kZXIgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBF
bmNvZGVyKCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5FbmNvZGVyKCk7CisKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGVGaXhlZExlbmd0aERhdGEoY29uc3QgdWludDhfdCos
IHNpemVfdCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZUVudW0oVCB0
KQorICAgIHsKKyAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFQpIDw9IHNpemVvZih1aW50
NjRfdCksIGVudW1fdHlwZV9tdXN0X25vdF9iZV9sYXJnZXJfdGhhbl82NF9iaXRzKTsKKworICAg
ICAgICBlbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHQpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGVuY29kZShjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAg
Q29kZXI8VD46OmVuY29kZSgqdGhpcywgdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gRW5jb2RlciYgb3BlcmF0b3I8PChjb25zdCBUJiB0KQorICAgIHsKKyAgICAgICAgZW5j
b2RlKHQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgY29uc3QgdWludDhf
dCogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CisgICAgc2l6ZV90
IGJ1ZmZlclNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5zaXplKCk7IH0KKworICAgIHN0
YXRpYyBjb25zdCBib29sIGlzSVBDRW5jb2RlciA9IGZhbHNlOworCitwcml2YXRlOgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShib29sKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBlbmNvZGUodWludDhfdCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5j
b2RlKHVpbnQxNl90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbmNvZGUodWludDMy
X3QpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZSh1aW50NjRfdCk7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZW5jb2RlKGludDMyX3QpOworICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGVuY29kZShpbnQ2NF90KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBlbmNvZGUoZmxvYXQpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGVuY29kZShkb3Vi
bGUpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4gdm9pZCBlbmNvZGVOdW1iZXIoVHlw
ZSk7CisKKyAgICB1aW50OF90KiBncm93KHNpemVfdCk7CisKKyAgICBWZWN0b3I8dWludDhfdCwg
NDA5Nj4gbV9idWZmZXI7Cit9OworCit9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNzZmYzE5NmRkY2ZiYjhjNGU3Y2ViYjg2ZTc3YWQ0NmJkM2U5
NzM1Zi4uYWQ3MzViYjM2ZDAyY2U3MWU4MWJlNmI3M2MyYzU4OTFiMmVkNzczNSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBA
CisyMDE3LTA4LTEwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgaW4tbWVtb3J5IGVuY29kZXIvZGVjb2RlcnMgdG8gV1RGLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NDcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIHRvIHZlcmlmeSB0aGF0
IHRoZSBtZW1vcnkgY29kZXJzIGFyZSBmYXN0ZXIgYW5kIGdlbmVyYXRlIHNtYWxsZXIgb3V0cHV0
CisgICAgICAgIHRoYW4gdGhlIHBlcnNpc3RlbmNlIGNvZGVycy4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvZGluZy5jcHA6IEFkZGVkLgorCiAyMDE3LTA4
LTEwICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYWRkaW5nIFJvc3MgS2lyc2xpbmcgdG8gY29udHJpYnV0b3JzLmpzb24KZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggYjI3OTA0ZjU4ODcxNzQzMTUzMzg0ZDZmMTEwODNiMDBlMDdi
OGI4OS4uMjVlNTg4NTY4NDRlN2E4NWQ2ZjAzOGQ1NjFmYWUxZjk2OWUyYjkzYSAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTE3Myw2ICsxNzMsNyBAQAogCQk1MUIxRUU5NzFDODBGQUVGMDA2
NEZCOTggLyogSW5kZXhlZERCUGVyc2lzdGVuY2UtMi5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjFFRTk1MUM4MEZBREQwMDY0RkI5
OCAvKiBJbmRleGVkREJQZXJzaXN0ZW5jZS0yLmh0bWwgKi87IH07CiAJCTUxQkNFRTRFMUM4NEY1
M0IwMDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVByb2Nlc3MtMS5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQkNFRTRDMUM4NEY1MkMw
MDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVByb2Nlc3MtMS5odG1sICovOyB9OwogCQk1MUJDRUU0
RjFDODRGNTNCMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJDRUU0RDFD
ODRGNTJDMDA0MkM4MkUgLyogSW5kZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCAqLzsgfTsKKwkJ
NTFCRUI2NTAxRjNDRkZEMzAwNTAyOUI5IC8qIENvZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJFQjY0RjFGM0NGRkM5MDA1MDI5QjkgLyog
Q29kaW5nLmNwcCAqLzsgfTsKIAkJNTFDNjgzREUxRUExMzRFODAwNjUwMTgzIC8qIFdLVVJMU2No
ZW1lSGFuZGxlci0xLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFDNjgzREQxRUExMzREQjAwNjUwMTgzIC8qIFdLVVJMU2NoZW1lSGFuZGxlci0xLm1t
ICovOyB9OwogCQk1MUM4RTFBNTFGMjZBRjRDMDBCRjczMUIgLyogUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QzhFMUE0MUYyNkFDNTQwMEJGNzMxQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tICovOyB9
OwogCQk1MUM4RTFBOTFGMjdGNDk2MDBCRjczMUIgLyogRW1wdHlHcmFuZGZhdGhlcmVkUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcy5wbGlzdCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM4RTFBODFGMjdGNDczMDBCRjczMUIgLyogRW1wdHlHcmFu
ZGZhdGhlcmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5wbGlzdCAqLzsgfTsKQEAgLTEyMzAsNiAr
MTIzMSw3IEBACiAJCTUxQkNFRTQ5MUM4NEY0QUYwMDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVBy
b2Nlc3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJbmRleGVk
REJNdWx0aVByb2Nlc3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQkNFRTRD
MUM4NEY1MkMwMDQyQzgyRSAvKiBJbmRleGVkREJNdWx0aVByb2Nlc3MtMS5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gIkluZGV4ZWREQk11bHRpUHJvY2Vzcy0xLmh0bWwiOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUJDRUU0RDFDODRGNTJDMDA0MkM4MkUgLyogSW5k
ZXhlZERCTXVsdGlQcm9jZXNzLTIuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9ICJJ
bmRleGVkREJNdWx0aVByb2Nlc3MtMi5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTFCRUI2NEYxRjNDRkZDOTAwNTAyOUI5IC8qIENvZGluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb2RpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM2ODNERDFF
QTEzNERCMDA2NTAxODMgLyogV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSAiV0tVUkxTY2hlbWVIYW5kbGVyLTEubW0iOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUM4RTFBNDFGMjZBQzU0MDBCRjczMUIgLyogUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzhFMUE4MUYy
N0Y0NzMwMEJGNzMxQiAvKiBFbXB0eUdyYW5kZmF0aGVyZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ZmlsZS5icGxpc3Q7IHBhdGggPSBFbXB0eUdyYW5kZmF0aGVyZWRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQwNiw2ICsyNDA4LDcg
QEAKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBEMUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAqLywK
IAkJCQlFNDAwMTkzMDFBQ0U5QjVDMDAxQjBBMkEgLyogQmxvb21GaWx0ZXIuY3BwICovLAogCQkJ
CUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwICovLAorCQkJCTUxQkVCNjRGMUYzQ0ZGQzkwMDUwMjlCOSAvKiBDb2RpbmcuY3BwICovLAog
CQkJCTBGRUFFMzY3MUI3RDE5Q0IwMENFMTdGMiAvKiBDb25kaXRpb24uY3BwICovLAogCQkJCTUx
NzE0RUI5MUQwODc0MTYwMDQ3MjNDNCAvKiBDcm9zc1RocmVhZFRhc2suY3BwICovLAogCQkJCTI2
QTJDNzJFMTVFMkU3M0MwMDVCMUExNCAvKiBDU3RyaW5nLmNwcCAqLywKQEAgLTI5NjQsNiArMjk2
Nyw3IEBACiAJCQkJMUFEQUQxNTAxRDc3QTlGNjAwMjEyNTg2IC8qIEJsb2NrUHRyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M4M0RFOUMxRDBBNTkwQzAwRkVCQ0YzIC8qIEJsb29tRmlsdGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERUEwMUQwQTU5MEMwMEZFQkNGMyAvKiBDaGVja2Vk
QXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFCRUI2NTAxRjND
RkZEMzAwNTAyOUI5IC8qIENvZGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREVDMzFE
MEE1OTBDMDBGRUJDRjMgLyogQ29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNE
RUE2MUQwQTU5MEMwMEZFQkNGMyAvKiBDb3VudGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzgzREVBOTFEMEE1OTBDMDBGRUJDRjMgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NvZGluZy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db2RpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiMTI5ZDE0
YzFhZDE4NDQ3NDU0N2ZkZGE1ZDcyMzEyODk2Yjc0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Db2RpbmcuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9tZW1vcnkvRGVjb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9tZW1v
cnkvRW5jb2Rlci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RGVjb2Rl
ci5oPgorI2luY2x1ZGUgPHd0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50RW5jb2Rlci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1Qo
V1RGX0NvZGluZywgTWVtb3J5Q29kaW5nU21hbGxlclRoYW5QZXJzaXN0ZW50Q29kaW5nKQorewor
ICAgIHVpbnQ2NF90IHRlc3RWYWx1ZSA9IDI2MzE7CisgICAgRW5jb2RlciBlbmNvZGVyOworICAg
IFBlcnNpc3RlbmNlOjpFbmNvZGVyIHBlcnNpc3RlbnRFbmNvZGVyOworICAgIGVuY29kZXIgPDwg
dGVzdFZhbHVlOworICAgIHBlcnNpc3RlbnRFbmNvZGVyIDw8IHRlc3RWYWx1ZTsKKyAgICBwZXJz
aXN0ZW50RW5jb2Rlci5lbmNvZGVDaGVja3N1bSgpOworCisgICAgRVhQRUNUX1RSVUUocGVyc2lz
dGVudEVuY29kZXIuYnVmZmVyU2l6ZSgpID4gZW5jb2Rlci5idWZmZXJTaXplKCkpOworCisgICAg
RGVjb2RlciBkZWNvZGVyKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKTsK
KyAgICBQZXJzaXN0ZW5jZTo6RGVjb2RlciBwZXJzaXN0ZW50RGVjb2RlcihwZXJzaXN0ZW50RW5j
b2Rlci5idWZmZXIoKSwgcGVyc2lzdGVudEVuY29kZXIuYnVmZmVyU2l6ZSgpKTsKKworICAgIEVY
UEVDVF9UUlVFKHBlcnNpc3RlbnREZWNvZGVyLmxlbmd0aCgpID4gZGVjb2Rlci5sZW5ndGgoKSk7
CisKKyAgICB1aW50NjRfdCBkZWNvZGVWYWx1ZTEsIGRlY29kZVZhbHVlMjsKKworICAgIEVYUEVD
VF9UUlVFKGRlY29kZXIuZGVjb2RlKGRlY29kZVZhbHVlMSkpOworICAgIEVYUEVDVF9UUlVFKHBl
cnNpc3RlbnREZWNvZGVyLmRlY29kZShkZWNvZGVWYWx1ZTIpKTsKKyAgICBFWFBFQ1RfRVEoZGVj
b2RlVmFsdWUxLCBkZWNvZGVWYWx1ZTIpOworICAgIEVYUEVDVF9FUShkZWNvZGVWYWx1ZTEsIHRl
c3RWYWx1ZSk7Cit9CisKKy8vIEVuY29kaW5nIHNob3VsZCBiZSB+Mi41eCBmYXN0ZXIgdGhhbiBj
aGVja3N1bSAocGVyc2lzdGVudCkgZW5jb2RpbmcuCisvLyBEZWNvZGluZyBzaG91bGQgYmUgfjZ4
IGZhc3RlciB0aGVuIGNoZWNrc3VtIChwZXJzaXN0ZW50KSBkZWNvZGluZy4KKy8vIENvbXBhcmUg
MTAsMDAwIHJ1bnMgb2YgdGhlIGJhc2UgZW5jb2Rlci9kZWNvZGVyIHZzIDksMDAwIHJ1bnMgb2Yg
dGhlIGNoZWNrc3VtIGVuY29kZXIvZGVjb2Rlci4KKy8vIFRoaXMgc2hvdWxkIHJlbGlhYmxlIGNh
cHR1cmUgYSBtaXN0YWtlIHdoZXJlIGJvdGggZW5jb2RlcnMgc3RhcnQgZG9pbmcgdGhlIGV4dHJh
IHdvcmsgb2YgY2hlY2tzdW1taW5nCisvLyBidXQgc2hvdWxkIGFsc28gcmVtYWluIGEgcmVsaWFi
bGUgdGVzdCB1bnRpbCB0aGUgc3BlZWQgZ2FwcyBjbG9zZSBhbG1vc3QgZW50aXJlbHkuCitURVNU
KFdURl9Db2RpbmcsIE1lbW9yeUNvZGluZ0Zhc3RlclRoYW5QZXJzaXN0ZW50Q29kaW5nKQorewor
ICAgIHVpbnQ2NF90IHRlc3RWYWx1ZSA9IDI2MzE7CisgICAgRW5jb2RlciBlbmNvZGVyOworICAg
IFBlcnNpc3RlbmNlOjpFbmNvZGVyIHBlcnNpc3RlbnRFbmNvZGVyOworCisgICAgZG91YmxlIG5v
cm1hbFRpbWUsIHBlcnNpc3RlbnRUaW1lOworICAgIGRvdWJsZSBzdGFydFRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBl
bmNvZGVyID0geyB9OworICAgICAgICBlbmNvZGVyIDw8IHRlc3RWYWx1ZTsKKyAgICB9CisgICAg
bm9ybWFsVGltZSA9IGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWU7CisKKyAgICBzdGFydFRpbWUg
PSBjdXJyZW50VGltZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTAwMDsgKytpKSB7Cisg
ICAgICAgIHBlcnNpc3RlbnRFbmNvZGVyID0geyB9OworICAgICAgICBwZXJzaXN0ZW50RW5jb2Rl
ciA8PCB0ZXN0VmFsdWU7CisgICAgfQorICAgIHBlcnNpc3RlbnRUaW1lID0gY3VycmVudFRpbWUo
KSAtIHN0YXJ0VGltZTsKKworICAgIEVYUEVDVF9UUlVFKG5vcm1hbFRpbWUgPCBwZXJzaXN0ZW50
VGltZSk7CisKKyAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICBEZWNvZGVyIGRlY29kZXIgPSB7IGVuY29k
ZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH07CisgICAgICAgIGRlY29kZXIuZGVj
b2RlKHRlc3RWYWx1ZSk7CisgICAgfQorICAgIG5vcm1hbFRpbWUgPSBjdXJyZW50VGltZSgpIC0g
c3RhcnRUaW1lOworCisgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDkwMDA7ICsraSkgeworICAgICAgICBQZXJzaXN0ZW5jZTo6RGVjb2RlciBw
ZXJzaXN0ZW50RGVjb2RlciA9IHsgcGVyc2lzdGVudEVuY29kZXIuYnVmZmVyKCksIHBlcnNpc3Rl
bnRFbmNvZGVyLmJ1ZmZlclNpemUoKSB9OworICAgICAgICBwZXJzaXN0ZW50RGVjb2Rlci5kZWNv
ZGUodGVzdFZhbHVlKTsKKyAgICB9CisgICAgcGVyc2lzdGVudFRpbWUgPSBjdXJyZW50VGltZSgp
IC0gc3RhcnRUaW1lOworCisgICAgRVhQRUNUX1RSVUUobm9ybWFsVGltZSA8IHBlcnNpc3RlbnRU
aW1lKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>
<flag name="review"
          id="338394"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>