<?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>63223</bug_id>
          <alias>ContactsAPI</alias>
          <creation_ts>2011-06-22 19:36:01 -0700</creation_ts>
          <short_desc>Support for Contacts API</short_desc>
          <delta_ts>2013-07-16 22:51:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/contacts-api/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>78947</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Donggwan Kim">donggwan.kim</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>christian.sejersen</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>ddahl</cc>
    
    <cc>dinu.jacob</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>dwim79</cc>
    
    <cc>efidler</cc>
    
    <cc>jarred</cc>
    
    <cc>kenneth</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mark.finkle</cc>
    
    <cc>mike</cc>
    
    <cc>ravi.kasibhatla</cc>
    
    <cc>sam</cc>
    
    <cc>sriram.yadavalli</cc>
    
    <cc>tobie.langel</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wonsuk11.lee</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>425896</commentid>
    <comment_count>0</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-06-22 19:36:01 -0700</bug_when>
    <thetext>There is no Contacts API implementation in WebKit
This API is a new feature that is published by W3C.
The Device APIs Working Group of W3C has just released a Last Call Working Draft of its Contacts API:
    http://www.w3.org/TR/2011/WD-contacts-api-20110616/
So we need to implement it.

I&apos;d like to implement it and I&apos;m implementing it now.

I&apos;m going to commit patch for Contacts API implementation very soon

Thank you</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425942</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-06-22 21:25:52 -0700</bug_when>
    <thetext>Please email the webkit-dev mailing list explain why you think this API should be implemented in WebKit as requested at http://www.webkit.org/coding/adding-features.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430175</commentid>
    <comment_count>2</comment_count>
      <attachid>99237</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-06-29 22:15:29 -0700</bug_when>
    <thetext>Created attachment 99237
Add new feature for Contacts API

I&apos;ve implemented new feature for contacts API.
Because of implementing new feature, file size of patch is larger than other patches.
If you feel any inconvenience for reviewing my patch, please let me know.
I&apos;ll split it as your recommendation.

Thank you.

Donggwan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430177</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-29 22:19:54 -0700</bug_when>
    <thetext>Attachment 99237 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Tools/DumpRenderTree/LayoutTestController.cpp:2220:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/DerivedSources.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/DerivedSources.cpp:60:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/DerivedSources.cpp:62:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/DerivedSources.cpp:64:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:102:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp:897:  Missing space before ( in switch(  [whitespace/parens] [5]
Total errors found: 7 in 83 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>430179</commentid>
    <comment_count>4</comment_count>
      <attachid>99237</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-29 22:21:39 -0700</bug_when>
    <thetext>Comment on attachment 99237
Add new feature for Contacts API

This patch is extremely large and there&apos;s some question on webkit-dev about whether we want to implement this API in this form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430185</commentid>
    <comment_count>5</comment_count>
      <attachid>99240</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-06-29 22:42:58 -0700</bug_when>
    <thetext>Created attachment 99240
Fix style check problem

fix style check problem with LayoutTestController.cpp.
remove build and port related files from patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430186</commentid>
    <comment_count>6</comment_count>
      <attachid>99240</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-29 22:45:03 -0700</bug_when>
    <thetext>Comment on attachment 99240
Fix style check problem

R- for the reasons above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430191</commentid>
    <comment_count>7</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-06-29 23:05:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 99240 [details])
&gt; R- for the reasons above.

do you want for me to split patch to smaller patches?
and what should i do for webkit-dev discussion issue?
and do i wait until that discussion is completed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430196</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-29 23:19:20 -0700</bug_when>
    <thetext>I think the main next step is to convince the WebKit project that we want to implement this feature.  The discussion on webkit-dev seemed to indicate that folks had some concerns about some structural design questions.

Generally speaking, the APIs from the DAP working group haven&apos;t received as much scrutiny from browser vendors as those from the WebApps or the HTML working groups.  That&apos;s not to say that WebKit isn&apos;t interested in APIs from DAP (for example, we&apos;ve implemented FileSystem), but you might find that there&apos;s some effort required to get folks on board.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99237</attachid>
            <date>2011-06-29 22:15:29 -0700</date>
            <delta_ts>2011-06-29 22:42:58 -0700</delta_ts>
            <desc>Add new feature for Contacts API</desc>
            <filename>ContactsPatch.txt</filename>
            <type>text/plain</type>
            <size>156071</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkwMDg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjg3IEBACisyMDExLTA2LTI5ICBEb25nZ3dh
biAgPGRvbmdnd2FuLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQ29udGFjdHMgQVBJIGZlYXR1cmUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzMjIzCisKKyAgICAgICAg
QcKgQ29udGFjdHPCoGludGVyZmFjZSwgd2hpY2ggcHJvdmlkZXMgdGhlIG1ldGhvZCBuZWVkZWQg
dG8gYWNjZXNzIGEgdXNlcidzIHVuaWZpZWQgYWRkcmVzcyBib29rLgorICAgICAgICBBwqBDb250
YWN0wqBpbnRlcmZhY2UsIHdoaWNoIGNhcHR1cmVzIHRoZSBpbmRpdmlkdWFsIGNvbnRhY3QgaW5m
b3JtYXRpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgZm9sbG93aW5nIGEgc3VjY2Vzc2Z1bCByZWFk
IG9wZXJhdGlvbi4KKyAgICAgICAgQSBDb250YWN0Q29udHJvbGxlciBpbnRlcmZhY2Ugd2hpY2gg
cHJvdmlkZXMgdGhlIG1ldGhvZCBuZWVkZWQgZm9yIHVzaW5nIGFsbCB0aGUgY29udGFjdHMgQVBJ
LgorICAgICAgICBBIENvbnRhY3RUaHJlYWQgaW50ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIHRoZSBt
ZXRob2QgbmVlZGVkIGZvciB1c2luZyB0aHJlYWQgZm9yIGFzeW5jaHJub3VzIGNhbGwuCisgICAg
ICAgIEEgQ29udGFjdFBlbmRpbmdPcGVyYXRpb24gaW50ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIHRo
ZSBtZXRob2QgZm9yIGFzeW5jaHJvbm91cyBjYWxsLiBpdCBpcyBhYnN0cmFjdCBjbGFzcy4KKyAg
ICAgICAgQSBDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24gaW50ZXJmYWNlIHdoaWNoIHByb3Zp
ZGVzIHRoZSBtZXRob2QgZm9yIGFzeW5jaHJvbm91cyBjYWxsLiBpdCBpcyBjb25jcmV0ZSBjbGFz
cy4KKyAgICAgICAgQSBDb250YWN0Q2xpZW50IGludGVyZmFjZSB3aGljaCBwcm92aWRlcyB0aGUg
bWV0aG9kIGZvciBwb3J0IGxheWVyLiBpdCBpcyBhYnN0cmFjdCBjbGFzcy4KKyAgICAgICAgQSBD
b250YWN0Q2xpZW50TW9jayBpbnRlcmZhY2Ugd2hpY2ggcHJvdmlkZXMgdGhlIG1ldGhvZCBmb3Ig
dGVzdGluZyBvZiBwb3J0IGxheWVyLiBpdCBpcyBjb25jcmV0ZSBjbGFzcyBhbmQgbW9jay11cCBj
bGFzcyBmb3IgdGVzdGluZy4KKyAgICAgICAgQSBDb250YWN0TmFtZSwgQ29udGFjdEZpZWxkLCBD
b250YWN0QWRkcmVzcywgQ29udGFjdE9yZ2FuaXphdGlvbiBpbnRlcmZhY2Ugd2hpY2ggcHJvdmlk
ZXMgZGF0YSBmb3IgY29uc3RydWN0aW5nIGNvbnRhY3QgaXRlbS4KKyAgICAgICAgQSBDb250YWN0
QXJyYXksIENvbnRhY3RGaWVsZEFycmF5LCBDb250YWN0QWRkcmVzc0FycmF5LCBDb250YWN0T3Jn
YW5pemF0aW9uQXJyYXkgaW50ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIGFycmF5IGRhdGEgZm9yIGNv
bnN0cnVjdGluZyBjb250YWN0IGl0ZW0gb3IgcGFzc2luZyBwYXJhbWV0ZXIgb2YgZmluZCBzdWNj
ZXNzIGNhbGxiYWNrLgorICAgICAgICBBIENvbnRhY3RFcnJvciBpbnRlcmZhY2Ugd2hpY2ggcHJv
dmlkZXMgZXJyb3IgaW5mb3JtYXRpb24gd2hlbiBmdW5jdGlvbiBvZiBjb250YWN0cyBhcGkgZmFp
bHMuCisgICAgICAgIEEgQ29udGFjdEVycm9yQ2FsbGJhY2sgaW50ZXJmYWNlIHdoaWNoIHByb3Zp
ZGVzIHRoZSBtZXRob2QgZm9yIGVycm9yIGNhbGxiYWNrLgorICAgICAgICBBIENvbnRhY3RGaW5k
Q2FsbGJhY2sgaW50ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIHRoZSBtZXRob2QgZm9yIGZpbmQgc3Vj
Y2VzcyBjYWxsYmFjay4KKyAgICAgICAgQSBDb250YWN0RmluZE9wdGlvbnMgaW50ZXJmYWNlIHdo
aWNoIHByb3ZpZGVzIHRoZSBkYXRhIGZvciBvcHRpb25zIG9mIGZpbmQgZnVuY3Rpb24uCisKKyAg
ICAgICAgVGVzdHM6IGZhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9kb20vQ29udGFjdHMvZXJyb3IuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20v
Q29udGFjdHMvcGVybWlzc2lvbi1kZW5pZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9kb20v
Q29udGFjdHMvc3VjY2Vzcy5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnRhY3Rz
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDb250YWN0RmluZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRhY3RFcnJvckNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRhY3RGaW5kT3B0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NvbnRhY3RzOjpmaW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0N1c3Rv
bUNvbnRhY3RFcnJvckNhbGxiYWNrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0N1
c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrOjpKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2s6Om9uZXJyb3Ip
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2suaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrOjpj
cmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFj
ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Db250YWN0RmluZENhbGxi
YWNrOjpKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SlND
dXN0b21Db250YWN0RmluZENhbGxiYWNrOjpvbnN1Y2Nlc3MpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBjb250
YWN0czogQWRkZWQuCisgICAgICAgICogY29udGFjdHMvQ29udGFjdC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhY3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
OjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0OjpkaXNwbGF5TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWN0OjpzZXREaXNwbGF5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0OjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFjdDo6bmlja25hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFjdDo6c2V0Tmlja25hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdDo6cGhvbmVOdW1i
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldFBob25lTnVtYmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250YWN0OjplbWFpbHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFj
dDo6c2V0RW1haWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OmFkZHJlc3Nlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWN0OjpzZXRBZGRyZXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdDo6aW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldEltcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWN0Ojpvcmdhbml6YXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhY3Q6OnNldE9yZ2FuaXphdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFj
dDo6cmV2aXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdDo6c2V0UmV2aXNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFjdDo6YmlydGhkYXkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGFjdDo6c2V0QmlydGhkYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdDo6Z2VuZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldEdlbmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWN0Ojpub3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldE5vdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdDo6cGhvdG9zKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRhY3Q6OnNldFBob3Rvcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0OjpjYXRlZ29y
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnNldENhdGVnb3JpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFjdDo6dXJscyk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0Ojpz
ZXRVcmxzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3Q6OnRpbWV6b25lKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhY3Q6OnNldFRpbWV6b25lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
Y3Q6OkNvbnRhY3QpOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3QuaWRsOiBBZGRlZC4KKyAg
ICAgICAgKiBjb250YWN0cy9Db250YWN0QWRkcmVzcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhY3RBZGRyZXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEFk
ZHJlc3M6OmZvcm1hdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0QWRkcmVzczo6c2V0
Rm9ybWF0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpzdHJlZXRBZGRy
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpzZXRTdHJlZXRBZGRyZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpsb2NhbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWN0QWRkcmVzczo6c2V0TG9jYWxpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdEFkZHJlc3M6OnJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0QWRk
cmVzczo6c2V0UmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpwb3N0
YWxDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpzZXRQb3N0YWxDb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpjb3VudHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzOjpzZXRDb3VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRhY3RBZGRyZXNzOjpDb250YWN0QWRkcmVzcyk6CisgICAgICAgICogY29udGFjdHMvQ29u
dGFjdEFkZHJlc3MuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0QWRkcmVz
c0FycmF5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0QWRkcmVzc0FycmF5
OjpDb250YWN0QWRkcmVzc0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNz
QXJyYXk6Oml0ZW0pOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RBZGRyZXNzQXJyYXkuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0QWRkcmVzc0FycmF5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEFkZHJlc3NBcnJheTo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhY3RBZGRyZXNzQXJyYXk6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdEFkZHJlc3NBcnJheTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFj
dEFkZHJlc3NBcnJheTo6YXBwZW5kKToKKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0QWRkcmVz
c0FycmF5LmlkbDogQWRkZWQuCisgICAgICAgICogY29udGFjdHMvQ29udGFjdEFycmF5LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0QXJyYXk6OkNvbnRhY3RBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWN0QXJyYXk6Oml0ZW0pOgorICAgICAgICAqIGNvbnRhY3Rz
L0NvbnRhY3RBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBcnJheTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBcnJheTo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhY3RBcnJheTo6aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0QXJyYXk6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RBcnJheTo6YXBw
ZW5kKToKKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0QXJyYXkuaWRsOiBBZGRlZC4KKyAgICAg
ICAgKiBjb250YWN0cy9Db250YWN0Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFjdENvbnRyb2xsZXI6OkNvbnRhY3RDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjp+Q29udGFjdENvbnRyb2xsZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGFjdENvbnRyb2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjYWxsRmluZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNh
bGxFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpj
b250YWN0RmluZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjplcnJv
ck9jY3VycmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpmaW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpzZXRBbGxvd2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpvbkNvbmZpcm1lZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0Q29udHJvbGxlcjo6b25EZW5pZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGFjdENvbnRyb2xsZXI6OmNsZWFyKToKKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0Q29u
dHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpj
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdENvbnRyb2xsZXI6OmVycm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDb250cm9sbGVyOjpjb250YWN0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0Q29udHJvbGxlcjo6ZmluZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhY3RDb250cm9sbGVyOjplcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBjb250YWN0
cy9Db250YWN0RXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RXJyb3I6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RXJyb3I6OmNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGFjdEVycm9yOjpDb250YWN0RXJyb3IpOgorICAgICAgICAqIGNvbnRh
Y3RzL0NvbnRhY3RFcnJvci5pZGw6IEFkZGVkLgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RF
cnJvckNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEVycm9yQ2Fs
bGJhY2s6OkNvbnRhY3RFcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RF
cnJvckNhbGxiYWNrOjp+Q29udGFjdEVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIGNvbnRhY3Rz
L0NvbnRhY3RGaWVsZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaWVsZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaWVsZDo6dHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWN0RmllbGQ6OnNldFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFjdEZpZWxkOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmllbGQ6OnNldFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaWVsZDo6cHJlZik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0RmllbGQ6OnNldFByZWYpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFj
dEZpZWxkOjpDb250YWN0RmllbGQpOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RGaWVsZC5p
ZGw6IEFkZGVkLgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RGaWVsZEFycmF5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmllbGRBcnJheTo6Q29udGFjdEZpZWxkQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEZpZWxkQXJyYXk6Oml0ZW0pOgorICAgICAg
ICAqIGNvbnRhY3RzL0NvbnRhY3RGaWVsZEFycmF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdEZpZWxkQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
RmllbGRBcnJheTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaWVsZEFycmF5
Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaWVsZEFycmF5OjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmllbGRBcnJheTo6YXBwZW5kKToKKyAgICAgICAg
KiBjb250YWN0cy9Db250YWN0RmllbGRBcnJheS5pZGw6IEFkZGVkLgorICAgICAgICAqIGNvbnRh
Y3RzL0NvbnRhY3RGaW5kQ2FsbGJhY2suaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
YWN0RmluZENhbGxiYWNrOjpDb250YWN0RmluZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRhY3RGaW5kQ2FsbGJhY2s6On5Db250YWN0RmluZENhbGxiYWNrKToKKyAgICAgICAgKiBj
b250YWN0cy9Db250YWN0RmluZE9wdGlvbnMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0RmluZE9wdGlvbnM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0Rmlu
ZE9wdGlvbnM6OmZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZE9wdGlvbnM6
OnNldEZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZE9wdGlvbnM6OmlzTXVs
dGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEZpbmRPcHRpb25zOjpzZXRNdWx0aXBs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZE9wdGlvbnM6OkNvbnRhY3RGaW5kT3B0
aW9ucyk6CisgICAgICAgICogY29udGFjdHMvQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246
OkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
RmluZFBlbmRpbmdPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
RmluZFBlbmRpbmdPcGVyYXRpb246On5Db250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uOjpjb250YWN0VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uOjpzdGFydE9u
Q29udGFjdFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZFBlbmRpbmdPcGVy
YXRpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6ZGVyZWZQcm94eU9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OnN0b3BPbkNvbnRh
Y3RUaHJlYWQpOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlv
bi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlv
bjo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlv
bjo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0TmFtZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3ROYW1lOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdE5hbWU6OmZvcm1hdHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0TmFt
ZTo6c2V0Rm9ybWF0dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3ROYW1lOjpmYW1pbHlO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3ROYW1lOjpzZXRGYW1pbHlOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRhY3ROYW1lOjpnaXZlbk5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdE5hbWU6OnNldEdpdmVuTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
TmFtZTo6bWlkZGxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0TmFtZTo6c2V0TWlk
ZGxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0TmFtZTo6aG9ub3JpZmljUHJlZml4
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3ROYW1lOjpzZXRIb25vcmlmaWNQcmVmaXgpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFjdE5hbWU6Omhvbm9yaWZpY1N1ZmZpeCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWN0TmFtZTo6c2V0SG9ub3JpZmljU3VmZml4KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhY3ROYW1lOjpDb250YWN0TmFtZSk6CisgICAgICAgICogY29udGFjdHMvQ29u
dGFjdE5hbWUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0T3JnYW5pemF0
aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdE9yZ2FuaXphdGlvbjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RPcmdhbml6YXRpb246Om5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGFjdE9yZ2FuaXphdGlvbjo6c2V0TmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0T3JnYW5pemF0aW9uOjpkZXBhcnRtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRhY3RPcmdhbml6YXRpb246OnNldERlcGFydG1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdE9yZ2FuaXphdGlvbjo6dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFj
dE9yZ2FuaXphdGlvbjo6c2V0VGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdE9yZ2Fu
aXphdGlvbjo6Q29udGFjdE9yZ2FuaXphdGlvbik6CisgICAgICAgICogY29udGFjdHMvQ29udGFj
dE9yZ2FuaXphdGlvbi5pZGw6IEFkZGVkLgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RPcmdh
bml6YXRpb25BcnJheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdE9yZ2Fu
aXphdGlvbkFycmF5OjpDb250YWN0T3JnYW5pemF0aW9uQXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFjdE9yZ2FuaXphdGlvbkFycmF5OjppdGVtKToKKyAgICAgICAgKiBjb250YWN0cy9D
b250YWN0T3JnYW5pemF0aW9uQXJyYXkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250
YWN0T3JnYW5pemF0aW9uQXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0
T3JnYW5pemF0aW9uQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0T3Jn
YW5pemF0aW9uQXJyYXk6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdE9yZ2Fu
aXphdGlvbkFycmF5OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0T3JnYW5pemF0
aW9uQXJyYXk6OmFwcGVuZCk6CisgICAgICAgICogY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlv
bkFycmF5LmlkbDogQWRkZWQuCisgICAgICAgICogY29udGFjdHMvQ29udGFjdFBlbmRpbmdPcGVy
YXRpb24uaDogQWRkZWQuCisgICAgICAgICogY29udGFjdHMvQ29udGFjdFRocmVhZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdFRocmVhZDo6Q29udGFjdFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWN0VGhyZWFkOjp+Q29udGFjdFRocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250YWN0VGhyZWFkOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpDb250
YWN0VGhyZWFkOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RUaHJlYWQ6OnBvc3RU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNhbWVJbnN0YW5jZVByZWRpY2F0ZTo6U2FtZUluc3Rh
bmNlUHJlZGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNhbWVJbnN0YW5jZVByZWRpY2F0ZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0VGhyZWFkOjp1bnNjaGVkdWxl
VGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdFRocmVhZDo6Y29udGFjdFRocmVhZFN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RUaHJlYWQ6OnJ1bkxvb3ApOgorICAgICAg
ICAqIGNvbnRhY3RzL0NvbnRhY3RUaHJlYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0VGhyZWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdFRocmVhZDo6
VGFzazo6flRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdFRocmVhZDo6VGFzazo6aW5z
dGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdFRocmVhZDo6VGFzazo6VGFzayk6Cisg
ICAgICAgICogY29udGFjdHMvQ29udGFjdFRocmVhZFRhc2suaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0VGhyZWFkVGFzazA6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0VGhyZWFkVGFzazA6OkNvbnRhY3RUaHJlYWRUYXNrMCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250YWN0VGhyZWFkVGFzazA6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNvbnRhY3RUaHJlYWRUYXNrKToKKyAgICAgICAgKiBjb250YWN0cy9Db250YWN0cy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGFjdHM6OkNvbnRhY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRhY3RzOjpkaXNjb25uZWN0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGFjdHM6OmZpbmQpOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RzLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFjdHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWN0czo6ZnJhbWUpOgorICAgICAgICAqIGNvbnRhY3RzL0NvbnRhY3RzLmlkbDogQWRkZWQu
CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6flNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y29udGFjdFRocmVhZCk6
CisgICAgICAgICogZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaDoKKyAgICAgICAgKiBwYWdl
L05hdmlnYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6OmRpc2Nvbm5lY3RG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3I6OmNvbnRhY3RzKToKKyAgICAgICAg
KiBwYWdlL05hdmlnYXRvci5oOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmlkbDoKKyAgICAg
ICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6UGFnZSk6CisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpjb250YWN0Q29udHJv
bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vQ29udGFjdENsaWVudC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRhY3RDbGllbnQ6On5Db250YWN0Q2xpZW50KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL0NvbnRhY3RDbGllbnRNb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb250YWN0Q2xpZW50TW9jazo6Q29udGFjdENsaWVudE1vY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGFjdENsaWVudE1vY2s6On5Db250YWN0Q2xpZW50TW9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0Q2xpZW50TW9jazo6dXBkYXRlUGVybWlzc2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0Q2xpZW50TW9jazo6dXBkYXRlQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb250YWN0Q2xpZW50TW9jazo6c2V0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb250YWN0Q2xpZW50TW9jazo6c2V0Q29udGFjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGFjdENsaWVudE1vY2s6OnNldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RD
bGllbnRNb2NrOjpzZXRQZXJtaXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDbGll
bnRNb2NrOjpyZXF1ZXN0UGVybWlzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250YWN0Q2xp
ZW50TW9jazo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGFjdENsaWVudE1vY2s6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDbGllbnRN
b2NrOjpmaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhY3RDbGllbnRNb2NrOjpjYW5jZWwp
OgorICAgICAgICAqIHBsYXRmb3JtL21vY2svQ29udGFjdENsaWVudE1vY2suaDogQWRkZWQuCisK
IDIwMTEtMDYtMjkgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NvZGVHZW5l
cmF0b3JzLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5w
cmkJKHJldmlzaW9uIDg5OTg2KQorKysgU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC00MzcsNiArNDM3LDIxIEBAIElETF9CSU5ESU5HUyArPSBcCiAg
ICAgeG1sL1hQYXRoRXZhbHVhdG9yLmlkbCBcCiAgICAgeG1sL1hTTFRQcm9jZXNzb3IuaWRsCiAK
K2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9DT05UQUNUUz0xKSB7CisgIElETF9CSU5ESU5HUyAr
PSBcCisgICAgY29udGFjdHMvQ29udGFjdC5pZGwgXAorICAgIGNvbnRhY3RzL0NvbnRhY3RBZGRy
ZXNzLmlkbCBcCisgICAgY29udGFjdHMvQ29udGFjdEFkZHJlc3NBcnJheS5pZGwgXAorICAgIGNv
bnRhY3RzL0NvbnRhY3RBcnJheS5pZGwgXAorICAgIGNvbnRhY3RzL0NvbnRhY3RFcnJvci5pZGwg
XAorICAgIGNvbnRhY3RzL0NvbnRhY3RGaWVsZC5pZGwgXAorICAgIGNvbnRhY3RzL0NvbnRhY3RG
aWVsZEFycmF5LmlkbCBcCisgICAgY29udGFjdHMvQ29udGFjdE5hbWUuaWRsIFwKKyAgICBjb250
YWN0cy9Db250YWN0T3JnYW5pemF0aW9uLmlkbCBcCisgICAgY29udGFjdHMvQ29udGFjdE9yZ2Fu
aXphdGlvbkFycmF5LmlkbCBcCisgICAgY29udGFjdHMvQ29udGFjdHMuaWRsCit9CisKIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICBJRExfQklORElOR1MgKz0gXAogICAgIHN2
Zy9TVkdab29tRXZlbnQuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAJKHJl
dmlzaW9uIDg5OTg2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Myw2ICs1MywxOSBAQAogI2luY2x1ZGUgIkpTQ29vcmRpbmF0ZXMuY3Bw
IgogI2luY2x1ZGUgIkpTQ291bnRlci5jcHAiCiAjaW5jbHVkZSAiSlNDcnlwdG8uY3BwIgorI2lm
IEVOQUJMRShDT05UQUNUUykKKyNpbmNsdWRlICJKU0NvbnRhY3RzLmNwcCIKKyNpbmNsdWRlICJK
U0NvbnRhY3QuY3BwIgorI2luY2x1ZGUgIkpTQ29udGFjdEVycm9yLmNwcCIKKyNpbmNsdWRlICJK
U0NvbnRhY3RBcnJheS5jcHAiCisjaW5jbHVkZSAiSlNDb250YWN0TmFtZS5jcHAiCisjaW5jbHVk
ZSAiSlNDb250YWN0RmllbGQuY3BwIgorI2luY2x1ZGUgIkpTQ29udGFjdEZpZWxkQXJyYXkuY3Bw
IgorI2luY2x1ZGUgIkpTQ29udGFjdEFkZHJlc3MuY3BwIgorI2luY2x1ZGUgIkpTQ29udGFjdEFk
ZHJlc3NBcnJheS5jcHAiCisjaW5jbHVkZSAiSlNDb250YWN0T3JnYW5pemF0aW9uLmNwcCIKKyNp
bmNsdWRlICJKU0NvbnRhY3RPcmdhbml6YXRpb25BcnJheS5jcHAiCisjZW5kaWYKICNpbmNsdWRl
ICJKU0NTU0NoYXJzZXRSdWxlLmNwcCIKICNpbmNsdWRlICJKU0NTU0ZvbnRGYWNlUnVsZS5jcHAi
CiAjaW5jbHVkZSAiSlNDU1NJbXBvcnRSdWxlLmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQkocmV2aXNpb24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIFZQQVRIID0gXAogICAg
ICQoV2ViQ29yZSkvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9q
cyBcCiAgICAgJChXZWJDb3JlKS9iaW5kaW5ncy9vYmpjIFwKKyAgICAkKFdlYkNvcmUpL2NvbnRh
Y3RzIFwKICAgICAkKFdlYkNvcmUpL2NzcyBcCiAgICAgJChXZWJDb3JlKS9kb20gXAogICAgICQo
V2ViQ29yZSkvZmlsZWFwaSBcCkBAIC0xMzUsNiArMTM2LDE3IEBAIERPTV9DTEFTU0VTID0gXAog
ICAgIENvdW50ZXIgXAogICAgIENyeXB0byBcCiAgICAgQ3VzdG9tRXZlbnQgXAorICAgIENvbnRh
Y3QgXAorICAgIENvbnRhY3RBZGRyZXNzIFwKKyAgICBDb250YWN0QWRkcmVzc0FycmF5IFwKKyAg
ICBDb250YWN0QXJyYXkgXAorICAgIENvbnRhY3RFcnJvciBcCisgICAgQ29udGFjdEZpZWxkIFwK
KyAgICBDb250YWN0RmllbGRBcnJheSBcCisgICAgQ29udGFjdE5hbWUgXAorICAgIENvbnRhY3RP
cmdhbml6YXRpb24gXAorICAgIENvbnRhY3RPcmdhbml6YXRpb25BcnJheSBcCisgICAgQ29udGFj
dHMgXAogICAgIERhdGFUcmFuc2Zlckl0ZW0gXAogICAgIERhdGFUcmFuc2Zlckl0ZW1zIFwKICAg
ICBEZWRpY2F0ZWRXb3JrZXJDb250ZXh0IFwKQEAgLTg4NSw3ICs4OTcsOCBAQCBJRExfSU5DTFVE
RVMgPSBcCiAgICAgJChXZWJDb3JlKS9wYWdlIFwKICAgICAkKFdlYkNvcmUpL25vdGlmaWNhdGlv
bnMgXAogICAgICQoV2ViQ29yZSkveG1sIFwKLSAgICAkKFdlYkNvcmUpL3N2ZworICAgICQoV2Vi
Q29yZSkvc3ZnIFwKKyAgICAkKFdlYkNvcmUpL2NvbnRhY3RzCiAKIElETF9DT01NT05fQVJHUyA9
ICQoSURMX0lOQ0xVREVTOiU9LS1pbmNsdWRlICUpIC0td3JpdGUtZGVwZW5kZW5jaWVzIC0tb3V0
cHV0RGlyIC4KIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkJKHJldmlzaW9uIDg5OTg2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgV0VC
Q09SRV9JTkNMVURFUEFUSCA9IFwKICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9iaW5kaW5ncyBc
CiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvYmluZGluZ3MvZ2VuZXJpYyBcCiAgICAgJCRTT1VS
Q0VfRElSL1dlYkNvcmUvYnJpZGdlIFwKKyAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9jb250YWN0
cyBcCiAgICAgJCRTT1VSQ0VfRElSL1dlYkNvcmUvY3NzIFwKICAgICAkJFNPVVJDRV9ESVIvV2Vi
Q29yZS9kb20gXAogICAgICQkU09VUkNFX0RJUi9XZWJDb3JlL2RvbS9kZWZhdWx0IFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCShyZXZpc2lvbiA4OTk4NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCSh3b3JraW5nIGNvcHkpCkBAIC0zNjU3LDMgKzM2NTcsNDUgQEAgY29udGFpbnMoQ09ORklH
LCB0ZXhtYXApIHsKICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
TGF5ZXJRdC5oCiAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xh
eWVyUXQuY3BwCiB9CisKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9DT05UQUNUUz0xKSB7Cisg
ICAgSEVBREVSUyArPSBcCisgICAgICAgIGNvbnRhY3RzL0NvbnRhY3RzLmggXAorICAgICAgICBj
b250YWN0cy9Db250YWN0LmggXAorICAgICAgICBjb250YWN0cy9Db250YWN0QXJyYXkuaCBcCisg
ICAgICAgIGNvbnRhY3RzL0NvbnRhY3ROYW1lLmggXAorICAgICAgICBjb250YWN0cy9Db250YWN0
RmllbGQuaCBcCisgICAgICAgIGNvbnRhY3RzL0NvbnRhY3RGaWVsZEFycmF5LmggXAorICAgICAg
ICBjb250YWN0cy9Db250YWN0QWRkcmVzcy5oIFwKKyAgICAgICAgY29udGFjdHMvQ29udGFjdEFk
ZHJlc3NBcnJheS5oIFwKKyAgICAgICAgY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5oIFwK
KyAgICAgICAgY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5LmggXAorICAgICAgICBj
b250YWN0cy9Db250YWN0Q29udHJvbGxlci5oIFwKKyAgICAgICAgY29udGFjdHMvQ29udGFjdEVy
cm9yLmggXAorICAgICAgICBjb250YWN0cy9Db250YWN0RXJyb3JDYWxsYmFjay5oIFwKKyAgICAg
ICAgY29udGFjdHMvQ29udGFjdEZpbmRDYWxsYmFjay5oIFwKKyAgICAgICAgY29udGFjdHMvQ29u
dGFjdEZpbmRPcHRpb25zLmggXAorICAgICAgICBjb250YWN0cy9Db250YWN0RmluZFBlbmRpbmdP
cGVyYXRpb24uaCBcCisgICAgICAgIGNvbnRhY3RzL0NvbnRhY3RUaHJlYWQuaCBcCisgICAgICAg
IGNvbnRhY3RzL0NvbnRhY3RUaHJlYWRUYXNrLmggXAorICAgICAgICBjb250YWN0cy9Db250YWN0
UGVuZGluZ09wZXJhdGlvbi5oIFwKKyAgICAgICAgcGxhdGZvcm0vQ29udGFjdENsaWVudC5oIFwK
KyAgICAgICAgcGxhdGZvcm0vbW9jay9Db250YWN0Q2xpZW50TW9jay5oIFwKKyAgICAgICAgYmlu
ZGluZ3MvanMvSlNDdXN0b21Db250YWN0RXJyb3JDYWxsYmFjay5oIFwKKyAgICAgICAgYmluZGlu
Z3MvanMvSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmgKKworICAgIFNPVVJDRVMgKz0gXAor
ICAgICAgICBjb250YWN0cy9Db250YWN0cy5jcHAgXAorICAgICAgICBjb250YWN0cy9Db250YWN0
Q29udHJvbGxlci5jcHAgXAorICAgICAgICBjb250YWN0cy9Db250YWN0QXJyYXkuY3BwIFwKKyAg
ICAgICAgY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXkuY3BwIFwKKyAgICAgICAgY29udGFjdHMv
Q29udGFjdEFkZHJlc3NBcnJheS5jcHAgXAorICAgICAgICBjb250YWN0cy9Db250YWN0T3JnYW5p
emF0aW9uQXJyYXkuY3BwIFwKKyAgICAgICAgY29udGFjdHMvQ29udGFjdEZpbmRQZW5kaW5nT3Bl
cmF0aW9uLmNwcCBcCisgICAgICAgIGNvbnRhY3RzL0NvbnRhY3RUaHJlYWQuY3BwIFwKKyAgICAg
ICAgcGxhdGZvcm0vbW9jay9Db250YWN0Q2xpZW50TW9jay5jcHAgXAorICAgICAgICBiaW5kaW5n
cy9qcy9KU0NvbnRhY3RzQ3VzdG9tLmNwcCBcCisgICAgICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9t
Q29udGFjdEZpbmRDYWxsYmFjay5jcHAgXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrLmNwcAorfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9mZWF0dXJl
cy5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmVhdHVyZXMucHJpCShyZXZpc2lv
biA4OTk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2ZlYXR1cmVzLnByaQkod29ya2luZyBjb3B5KQpA
QCAtOTMsNiArOTMsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RIUkVBREVE
CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPS4pOiBERUZJTkVTICs9IEVO
QUJMRV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNIX0lDT05f
TE9BRElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTAKICFjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTogREVGSU5FUyArPSBFTkFCTEVf
QU5JTUFUSU9OX0FQST0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0NPTlRBQ1RTPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9DT05UQUNUUz0xCiAKICMgU1ZHIHN1cHBvcnQKICFjb250YWlucyhE
RUZJTkVTLCBFTkFCTEVfU1ZHPTApIHsKQEAgLTI1MSwzICsyNTIsNCBAQCBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfQkxPQj0xKTogRkVBVFVSCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTUVE
SUFfU1RBVElTVElDUz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX01F
RElBX1NUQVRJU1RJQ1M9MQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPTEp
OiBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfVklERU9fVFJBQ0s9MQogY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX0RBVEFfVFJBTlNGRVJfSVRFTVM9MSk6IEZFQVRVUkVfREVG
SU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9EQVRBX1RSQU5TRkVSX0lURU1TPTEKK2NvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9DT05UQUNUUz0xKTogRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQg
Kz0gRU5BQkxFX0NPTlRBQ1RTPTEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q29udGFjdHNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29udGFjdHNDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDb250YWN0c0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTI5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTQ29udGFjdHMuaCIKKworI2lmIEVO
QUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RGaW5kT3B0aW9ucy5oIgorI2luY2x1
ZGUgIkNvbnRhY3RzLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0N1c3Rv
bUNvbnRhY3RFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSlNDdXN0b21Db250YWN0RmluZENh
bGxiYWNrLmgiCisjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIFBhc3NSZWZQdHI8Q29udGFjdEZpbmRDYWxsYmFjaz4gY3JlYXRlQ29udGFjdEZpbmRD
YWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cygmSlNGdW5jdGlvbjo6
c19pbmZvKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9F
UlIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0g
YXNPYmplY3QodmFsdWUpOworICAgIHJldHVybiBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2s6
OmNyZWF0ZShvYmplY3QsIGdsb2JhbE9iamVjdCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPENv
bnRhY3RFcnJvckNhbGxiYWNrPiBjcmVhdGVDb250YWN0RXJyb3JDYWxsYmFjayhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgeworICAgICAg
ICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwor
ICAgIHJldHVybiBKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBn
bG9iYWxPYmplY3QpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmluZE9wdGlvbnM+
IGNyZWF0ZUNvbnRhY3RGaW5kT3B0aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgUmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4gb3B0aW9ucyA9IENvbnRhY3RGaW5k
T3B0aW9uczo6Y3JlYXRlKCk7CisKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworCisgICAgSlNPYmplY3QqIG9iamVj
dCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMpOworCisgICAgSlNWYWx1ZSBmaWx0ZXIgPSBvYmplY3Qt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJmaWx0ZXIiKSk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWZpbHRlci5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKHVzdHJpbmdUb1N0
cmluZyhmaWx0ZXIudG9TdHJpbmcoZXhlYykpKTsKKyAgICAgICAgb3B0aW9ucy0+c2V0RmlsdGVy
KHN0cmluZyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIEpTVmFsdWUgbXVsdGlwbGUgPSBvYmplY3QtPmdldChl
eGVjLCBJZGVudGlmaWVyKGV4ZWMsICJtdWx0aXBsZSIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICghbXVsdGlwbGUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICBvcHRpb25zLT5zZXRNdWx0aXBsZShmaWx0ZXIudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworfQor
CitKU1ZhbHVlIEpTQ29udGFjdHM6OmZpbmQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEFy
Z3VtZW50czogU2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRE9NU3RyaW5nTGlzdCwgQ29udGFjdEZp
bmRDYWxsYmFjaywgKG9wdGlvbmFsKUNvbnRhY3RFcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpQ29u
dGFjdEZpbmRPcHRpb25zCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBET01TdHJpbmdMaXN0KiBmaWVsZHModG9ET01T
dHJpbmdMaXN0KGV4ZWMtPmFyZ3VtZW50KDApKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFJlZlB0cjxDb250YWN0
RmluZENhbGxiYWNrPiBjb250YWN0RmluZENhbGxiYWNrID0gY3JlYXRlQ29udGFjdEZpbmRDYWxs
YmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIGV4ZWMtPmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChjb250
YWN0RmluZENhbGxiYWNrKTsKKworICAgIFJlZlB0cjxDb250YWN0RXJyb3JDYWxsYmFjaz4gY29u
dGFjdEVycm9yQ2FsbGJhY2sgPSBjcmVhdGVDb250YWN0RXJyb3JDYWxsYmFjayhleGVjLCBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSks
IGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChjb250YWN0RXJyb3JDYWxsYmFj
ayk7CisKKyAgICBSZWZQdHI8Q29udGFjdEZpbmRPcHRpb25zPiBjb250YWN0RmluZE9wdGlvbnMg
PSBjcmVhdGVDb250YWN0RmluZE9wdGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMykpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgQVNTRVJUKGNvbnRhY3RGaW5kT3B0aW9ucyk7CisKKyAgICBtX2ltcGwtPmZpbmQoY29u
dGV4dCwgZmllbGRzLCBjb250YWN0RmluZENhbGxiYWNrLnJlbGVhc2UoKSwgY29udGFjdEVycm9y
Q2FsbGJhY2sucmVsZWFzZSgpLCBjb250YWN0RmluZE9wdGlvbnMucmVsZWFzZSgpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKENPTlRBQ1RTKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNDdXN0b21Db250YWN0RXJyb3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Db250YWN0RXJyb3JDYWxsYmFjay5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUNvbnRhY3RFcnJv
ckNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrLmgiCisKKyNpZiBFTkFC
TEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTQ29udGFjdEVy
cm9yLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK0pTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2s6OkpTQ3VzdG9tQ29udGFjdEVycm9y
Q2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIDogQ29udGFjdEVycm9yQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgLCBtX2RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkKK3sK
K30KKwordm9pZCBKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrOjpvbmVycm9yKENvbnRhY3RF
cnJvciogY29udGFjdEVycm9yKQoreworICAgIC8vIEFjdGl2ZURPTU9iamVjdCB3aWxsIG51bGwg
b3VyIHBvaW50ZXIgdG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgd2hlbiBpdCBnb2VzIGF3
YXkuCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlZlB0cjxKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMp
OworCisgICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IG1fZGF0YS5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpLCBjb250YWN0RXJyb3IpKTsK
KyAgICAKKyAgICBtX2RhdGEuaW52b2tlQ2FsbGJhY2soYXJncyk7Cit9CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUNvbnRhY3RFcnJv
ckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aWZuZGVmIEpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2tfaAorI2RlZmluZSBKU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrX2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUg
IkNvbnRhY3RFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFz
cyBDb250YWN0RXJyb3I7CisKK2NsYXNzIEpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2sgOiBw
dWJsaWMgQ29udGFjdEVycm9yQ2FsbGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2s+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBj
YWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSlNDdXN0b21Db250YWN0RXJyb3JDYWxsYmFjayhjYWxsYmFj
aywgZ2xvYmFsT2JqZWN0KSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrKEpTQzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9i
amVjdCopOworICAgIHZpcnR1YWwgdm9pZCBvbmVycm9yKENvbnRhY3RFcnJvciopOworICAgIAor
ICAgIEpTQ2FsbGJhY2tEYXRhIG1fZGF0YTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBKU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxs
YmFjay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoQ09O
VEFDVFMpCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTQ29udGFjdEFycmF5Lmgi
CisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworSlND
dXN0b21Db250YWN0RmluZENhbGxiYWNrOjpKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2soSlNP
YmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDog
Q29udGFjdEZpbmRDYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAsIG1fZGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KQoreworfQorCit2b2lkIEpT
Q3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjazo6b25zdWNjZXNzKENvbnRhY3RBcnJheSogY29udGFj
dHMpCit7CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IHdpbGwgbnVsbCBvdXIgcG9pbnRlciB0byB0
aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB3aGVuIGl0IGdvZXMgYXdheS4KKyAgICBpZiAoIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEpT
Q3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKKworICAgIEpTQzo6SlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBt
X2RhdGEuZ2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOworICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9i
amVjdEZvclByb3RvdHlwZShleGVjKSwgY29udGFjdHMpKTsKKyAgICBtX2RhdGEuaW52b2tlQ2Fs
bGJhY2soYXJncyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
Q29udGFjdEZpbmRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFj
a19oCisjZGVmaW5lIEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFja19oCisKKyNpZiBFTkFCTEUo
Q09OVEFDVFMpCisKKyNpbmNsdWRlICJDb250YWN0RmluZENhbGxiYWNrLmgiCisjaW5jbHVkZSAi
SlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RBcnJheTsKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0
OworCitjbGFzcyBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2sgOiBwdWJsaWMgQ29udGFjdEZp
bmRDYWxsYmFjayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDdXN0b21Db250
YWN0RmluZENhbGxiYWNrPiBjcmVhdGUoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2so
SlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgb25zdWNjZXNzKENvbnRhY3RBcnJheSopOworICAgIAorICAgIEpTQ2FsbGJhY2tE
YXRhIG1fZGF0YTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJh
Y2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MzMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIENvbnRhY3RfaAorI2RlZmluZSBDb250YWN0X2gKKworI2lmIEVOQUJMRShDT05U
QUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RBZGRyZXNzLmgiCisjaW5jbHVkZSAiQ29udGFjdEFk
ZHJlc3NBcnJheS5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaWVsZC5oIgorI2luY2x1ZGUgIkNvbnRh
Y3RGaWVsZEFycmF5LmgiCisjaW5jbHVkZSAiQ29udGFjdE5hbWUuaCIKKyNpbmNsdWRlICJDb250
YWN0T3JnYW5pemF0aW9uLmgiCisjaW5jbHVkZSAiQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5Lmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CisKK2NsYXNz
IENvbnRhY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0PiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29udGFjdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3QoaWQpKTsKKyAgICB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29udGFjdD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0
cmluZyYgZGlzcGxheU5hbWUsIFBhc3NSZWZQdHI8Q29udGFjdE5hbWU+IG5hbWUsIGNvbnN0IFN0
cmluZyYgbmlja25hbWUsIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob25lTnVtYmVy
cywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gZW1haWxzLCBQYXNzUmVmUHRyPENvbnRh
Y3RBZGRyZXNzQXJyYXk+IGFkZHJlc3NlcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4g
aW1zLCBQYXNzUmVmUHRyPENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4gb3JnYW5pemF0aW9ucywg
ZG91YmxlIHJldmlzaW9uLCBkb3VibGUgYmlydGhkYXksIGNvbnN0IFN0cmluZyYgZ2VuZGVyLCBj
b25zdCBTdHJpbmcmIG5vdGUsIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob3Rvcywg
RE9NU3RyaW5nTGlzdCogY2F0ZWdvcmllcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4g
dXJscywgY29uc3QgU3RyaW5nJiB0aW1lem9uZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ29udGFjdChpZCwgZGlzcGxheU5hbWUsIG5hbWUsIG5pY2tuYW1lLCBwaG9uZU51
bWJlcnMsIGVtYWlscywgYWRkcmVzc2VzLCBpbXMsIG9yZ2FuaXphdGlvbnMsIHJldmlzaW9uLCBi
aXJ0aGRheSwgZ2VuZGVyLCBub3RlLCBwaG90b3MsIGNhdGVnb3JpZXMsIHVybHMsIHRpbWV6b25l
KSk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7
IH0KKyAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kaXNw
bGF5TmFtZTsgfQorICAgIHZvaWQgc2V0RGlzcGxheU5hbWUoY29uc3QgU3RyaW5nJiBkaXNwbGF5
TmFtZSkgeyBtX2Rpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7IH0KKyAgICBDb250YWN0TmFtZSog
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0TmFtZShQ
YXNzUmVmUHRyPENvbnRhY3ROYW1lPiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KKyAgICBjb25z
dCBTdHJpbmcmIG5pY2tuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uaWNrbmFtZTsgfQorICAgIHZv
aWQgc2V0Tmlja25hbWUoY29uc3QgU3RyaW5nJiBuaWNrbmFtZSkgeyBtX25pY2tuYW1lID0gbmlj
a25hbWU7IH0KKyAgICBDb250YWN0RmllbGRBcnJheSogcGhvbmVOdW1iZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9waG9uZU51bWJlcnMuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFBob25lTnVtYmVycyhQ
YXNzUmVmUHRyPENvbnRhY3RGaWVsZEFycmF5PiBwaG9uZU51bWJlcnMpIHsgbV9waG9uZU51bWJl
cnMgPSBwaG9uZU51bWJlcnM7IH0KKyAgICBDb250YWN0RmllbGRBcnJheSogZW1haWxzKCkgY29u
c3QgeyByZXR1cm4gbV9lbWFpbHMuZ2V0KCk7IH0KKyAgICB2b2lkIHNldEVtYWlscyhQYXNzUmVm
UHRyPENvbnRhY3RGaWVsZEFycmF5PiBlbWFpbHMpIHsgbV9lbWFpbHMgPSBlbWFpbHM7IH0KKyAg
ICBDb250YWN0QWRkcmVzc0FycmF5KiBhZGRyZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX2FkZHJl
c3Nlcy5nZXQoKTsgfQorICAgIHZvaWQgc2V0QWRkcmVzc2VzKFBhc3NSZWZQdHI8Q29udGFjdEFk
ZHJlc3NBcnJheT4gYWRkcmVzc2VzKSB7IG1fYWRkcmVzc2VzID0gYWRkcmVzc2VzOyB9CisgICAg
Q29udGFjdEZpZWxkQXJyYXkqIGltcygpIGNvbnN0IHsgcmV0dXJuIG1faW1zLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRJbXMoUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gaW1zKSB7IG1faW1z
ID0gaW1zOyB9CisgICAgQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5KiBvcmdhbml6YXRpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmdhbml6YXRpb25zLmdldCgpOyB9CisgICAgdm9pZCBzZXRPcmdh
bml6YXRpb25zKFBhc3NSZWZQdHI8Q29udGFjdE9yZ2FuaXphdGlvbkFycmF5PiBvcmdhbml6YXRp
b25zKSB7IG1fb3JnYW5pemF0aW9ucyA9IG9yZ2FuaXphdGlvbnM7IH0KKyAgICBkb3VibGUgcmV2
aXNpb24oKSBjb25zdCB7IHJldHVybiBtX3JldmlzaW9uOyB9CisgICAgdm9pZCBzZXRSZXZpc2lv
bihkb3VibGUgcmV2aXNpb24pIHsgbV9yZXZpc2lvbiA9IHJldmlzaW9uOyB9CisgICAgZG91Ymxl
IGJpcnRoZGF5KCkgY29uc3QgeyByZXR1cm4gbV9iaXJ0aGRheTsgfQorICAgIHZvaWQgc2V0Qmly
dGhkYXkoZG91YmxlIGJpcnRoZGF5KSB7IG1fYmlydGhkYXkgPSBiaXJ0aGRheTsgfQorICAgIGNv
bnN0IFN0cmluZyYgZ2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV9nZW5kZXI7IH0KKyAgICB2b2lk
IHNldEdlbmRlcihjb25zdCBTdHJpbmcmIGdlbmRlcikgeyBtX2dlbmRlciA9IGdlbmRlcjsgfQor
ICAgIGNvbnN0IFN0cmluZyYgbm90ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90ZTsgfQorICAgIHZv
aWQgc2V0Tm90ZShjb25zdCBTdHJpbmcmIG5vdGUpIHsgbV9ub3RlID0gbm90ZTsgfQorICAgIENv
bnRhY3RGaWVsZEFycmF5KiBwaG90b3MoKSBjb25zdCB7IHJldHVybiBtX3Bob3Rvcy5nZXQoKTsg
fQorICAgIHZvaWQgc2V0UGhvdG9zKFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob3Rv
cykgeyBtX3Bob3RvcyA9IHBob3RvczsgfQorICAgIERPTVN0cmluZ0xpc3QqIGNhdGVnb3JpZXMo
KSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3JpZXM7IH0KKyAgICB2b2lkIHNldENhdGVnb3JpZXMo
RE9NU3RyaW5nTGlzdCogY2F0ZWdvcmllcykgeyBtX2NhdGVnb3JpZXMgPSBjYXRlZ29yaWVzOyB9
CisgICAgQ29udGFjdEZpZWxkQXJyYXkqIHVybHMoKSBjb25zdCB7IHJldHVybiBtX3VybHMuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFVybHMoUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gdXJs
cykgeyBtX3VybHMgPSB1cmxzOyB9CisgICAgY29uc3QgU3RyaW5nJiB0aW1lem9uZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGltZXpvbmU7IH0KKyAgICB2b2lkIHNldFRpbWV6b25lKGNvbnN0IFN0cmlu
ZyYgdGltZXpvbmUpIHsgbV90aW1lem9uZSA9IHRpbWV6b25lOyB9CisKK3ByaXZhdGU6CisgICAg
Q29udGFjdChjb25zdCBTdHJpbmcmIGlkKQorICAgICAgICA6IG1faWQoaWQpCisgICAgeworICAg
IH0KKyAgICBDb250YWN0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5h
bWUsIFBhc3NSZWZQdHI8Q29udGFjdE5hbWU+IG5hbWUsIGNvbnN0IFN0cmluZyYgbmlja25hbWUs
IFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob25lTnVtYmVycywgUGFzc1JlZlB0cjxD
b250YWN0RmllbGRBcnJheT4gZW1haWxzLCBQYXNzUmVmUHRyPENvbnRhY3RBZGRyZXNzQXJyYXk+
IGFkZHJlc3NlcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gaW1zLCBQYXNzUmVmUHRy
PENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4gb3JnYW5pemF0aW9ucywgZG91YmxlIHJldmlzaW9u
LCBkb3VibGUgYmlydGhkYXksIGNvbnN0IFN0cmluZyYgZ2VuZGVyLCBjb25zdCBTdHJpbmcmIG5v
dGUsIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob3RvcywgRE9NU3RyaW5nTGlzdCog
Y2F0ZWdvcmllcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gdXJscywgY29uc3QgU3Ry
aW5nJiB0aW1lem9uZSkKKyAgICAgICAgOiBtX2lkKGlkKQorICAgICAgICAsIG1fZGlzcGxheU5h
bWUoZGlzcGxheU5hbWUpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9uaWNr
bmFtZShuaWNrbmFtZSkKKyAgICAgICAgLCBtX3Bob25lTnVtYmVycyhwaG9uZU51bWJlcnMpCisg
ICAgICAgICwgbV9lbWFpbHMoZW1haWxzKQorICAgICAgICAsIG1fYWRkcmVzc2VzKGFkZHJlc3Nl
cykKKyAgICAgICAgLCBtX2ltcyhpbXMpCisgICAgICAgICwgbV9vcmdhbml6YXRpb25zKG9yZ2Fu
aXphdGlvbnMpCisgICAgICAgICwgbV9yZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgLCBtX2Jp
cnRoZGF5KGJpcnRoZGF5KQorICAgICAgICAsIG1fZ2VuZGVyKGdlbmRlcikKKyAgICAgICAgLCBt
X25vdGUobm90ZSkKKyAgICAgICAgLCBtX3Bob3RvcyhwaG90b3MpCisgICAgICAgICwgbV9jYXRl
Z29yaWVzKGNhdGVnb3JpZXMpCisgICAgICAgICwgbV91cmxzKHVybHMpCisgICAgICAgICwgbV90
aW1lem9uZSh0aW1lem9uZSkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIG1faWQ7CisgICAg
U3RyaW5nIG1fZGlzcGxheU5hbWU7CisgICAgUmVmUHRyPENvbnRhY3ROYW1lPiBtX25hbWU7Cisg
ICAgU3RyaW5nIG1fbmlja25hbWU7CisgICAgUmVmUHRyPENvbnRhY3RGaWVsZEFycmF5PiBtX3Bo
b25lTnVtYmVyczsKKyAgICBSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IG1fZW1haWxzOworICAg
IFJlZlB0cjxDb250YWN0QWRkcmVzc0FycmF5PiBtX2FkZHJlc3NlczsKKyAgICBSZWZQdHI8Q29u
dGFjdEZpZWxkQXJyYXk+IG1faW1zOworICAgIFJlZlB0cjxDb250YWN0T3JnYW5pemF0aW9uQXJy
YXk+IG1fb3JnYW5pemF0aW9uczsKKyAgICBkb3VibGUgbV9yZXZpc2lvbjsKKyAgICBkb3VibGUg
bV9iaXJ0aGRheTsKKyAgICBTdHJpbmcgbV9nZW5kZXI7CisgICAgU3RyaW5nIG1fbm90ZTsKKyAg
ICBSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IG1fcGhvdG9zOworICAgIERPTVN0cmluZ0xpc3Qq
IG1fY2F0ZWdvcmllczsKKyAgICBSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IG1fdXJsczsKKyAg
ICBTdHJpbmcgbV90aW1lem9uZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDT05UQUNUUykKKworI2VuZGlmIC8vIENvbnRhY3RfaApJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdC5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250YWN0cy9Db250YWN0LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBj
b3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLCAK
KyAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgXSBDb250YWN0IHsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBpZDsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBk
aXNwbGF5TmFtZTsKKyAgICAgICAgYXR0cmlidXRlIENvbnRhY3ROYW1lIG5hbWU7CisgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgbmlja25hbWU7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0
RmllbGRBcnJheSBwaG9uZU51bWJlcnM7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRB
cnJheSBlbWFpbHM7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0QWRkcmVzc0FycmF5IGFkZHJl
c3NlczsKKyAgICAgICAgYXR0cmlidXRlIENvbnRhY3RGaWVsZEFycmF5IGltczsKKyAgICAgICAg
YXR0cmlidXRlIENvbnRhY3RPcmdhbml6YXRpb25BcnJheSBvcmdhbml6YXRpb25zOworICAgICAg
ICBhdHRyaWJ1dGUgRGF0ZSByZXZpc2lvbjsKKyAgICAgICAgYXR0cmlidXRlIERhdGUgYmlydGhk
YXk7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZ2VuZGVyOworICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIG5vdGU7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRBcnJheSBw
aG90b3M7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IGNhdGVnb3JpZXM7CisgICAg
ICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRBcnJheSB1cmxzOworICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHRpbWV6b25lOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
YWN0cy9Db250YWN0QWRkcmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRh
Y3RzL0NvbnRhY3RBZGRyZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
YWN0cy9Db250YWN0QWRkcmVzcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBD
b250YWN0QWRkcmVzc19oCisjZGVmaW5lIENvbnRhY3RBZGRyZXNzX2gKKworI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJM
RShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0QWRkcmVz
cyA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RBZGRyZXNzPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29udGFjdEFkZHJlc3M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RBZGRyZXNzKCkpOworICAgIH0KKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb250YWN0QWRkcmVzcz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZm9ybWF0dGVk
LCBjb25zdCBTdHJpbmcmIHN0cmVldEFkZHJlc3MsIGNvbnN0IFN0cmluZyYgbG9jYWxpdHksIGNv
bnN0IFN0cmluZyYgcmVnaW9uLCBjb25zdCBTdHJpbmcmIHBvc3RhbENvZGUsIGNvbnN0IFN0cmlu
ZyYgY291bnRyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdEFk
ZHJlc3MoZm9ybWF0dGVkLCBzdHJlZXRBZGRyZXNzLCBsb2NhbGl0eSwgcmVnaW9uLCBwb3N0YWxD
b2RlLCBjb3VudHJ5KSk7CisgICAgfQorCisgICAgY29uc3QgU3RyaW5nJiBmb3JtYXR0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2Zvcm1hdHRlZDsgfQorICAgIHZvaWQgc2V0Rm9ybWF0dGVkKGNvbnN0
IFN0cmluZyYgZm9ybWF0dGVkKSB7IG1fZm9ybWF0dGVkID0gZm9ybWF0dGVkOyB9CisgICAgY29u
c3QgU3RyaW5nJiBzdHJlZXRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlZXRBZGRyZXNz
OyB9CisgICAgdm9pZCBzZXRTdHJlZXRBZGRyZXNzKGNvbnN0IFN0cmluZyYgc3RyZWV0QWRkcmVz
cykgeyBtX3N0cmVldEFkZHJlc3MgPSBzdHJlZXRBZGRyZXNzOyB9CisgICAgY29uc3QgU3RyaW5n
JiBsb2NhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxpdHk7IH0KKyAgICB2b2lkIHNldExv
Y2FsaXR5KGNvbnN0IFN0cmluZyYgbG9jYWxpdHkpIHsgbV9sb2NhbGl0eSA9IGxvY2FsaXR5OyB9
CisgICAgY29uc3QgU3RyaW5nJiByZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbjsgfQor
ICAgIHZvaWQgc2V0UmVnaW9uKGNvbnN0IFN0cmluZyYgcmVnaW9uKSB7IG1fcmVnaW9uID0gcmVn
aW9uOyB9CisgICAgY29uc3QgU3RyaW5nJiBwb3N0YWxDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9w
b3N0YWxDb2RlOyB9CisgICAgdm9pZCBzZXRQb3N0YWxDb2RlKGNvbnN0IFN0cmluZyYgcG9zdGFs
Q29kZSkgeyBtX3Bvc3RhbENvZGUgPSBwb3N0YWxDb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBj
b3VudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudHJ5OyB9CisgICAgdm9pZCBzZXRDb3VudHJ5
KGNvbnN0IFN0cmluZyYgY291bnRyeSkgeyBtX2NvdW50cnkgPSBjb3VudHJ5OyB9CisKK3ByaXZh
dGU6CisgICAgQ29udGFjdEFkZHJlc3MoKSB7IH0KKyAgICBDb250YWN0QWRkcmVzcyhjb25zdCBT
dHJpbmcmIGZvcm1hdHRlZCwgY29uc3QgU3RyaW5nJiBzdHJlZXRBZGRyZXNzLCBjb25zdCBTdHJp
bmcmIGxvY2FsaXR5LCBjb25zdCBTdHJpbmcmIHJlZ2lvbiwgY29uc3QgU3RyaW5nJiBwb3N0YWxD
b2RlLCBjb25zdCBTdHJpbmcmIGNvdW50cnkpCisgICAgICAgIDogbV9mb3JtYXR0ZWQoZm9ybWF0
dGVkKQorICAgICAgICAsIG1fc3RyZWV0QWRkcmVzcyhzdHJlZXRBZGRyZXNzKQorICAgICAgICAs
IG1fbG9jYWxpdHkobG9jYWxpdHkpCisgICAgICAgICwgbV9yZWdpb24ocmVnaW9uKQorICAgICAg
ICAsIG1fcG9zdGFsQ29kZShwb3N0YWxDb2RlKQorICAgICAgICAsIG1fY291bnRyeShjb3VudHJ5
KQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9mb3JtYXR0ZWQ7CisgICAgU3RyaW5nIG1f
c3RyZWV0QWRkcmVzczsKKyAgICBTdHJpbmcgbV9sb2NhbGl0eTsKKyAgICBTdHJpbmcgbV9yZWdp
b247CisgICAgU3RyaW5nIG1fcG9zdGFsQ29kZTsKKyAgICBTdHJpbmcgbV9jb3VudHJ5OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQor
CisjZW5kaWYgLy8gQ29udGFjdEFkZHJlc3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFj
dHMvQ29udGFjdEFkZHJlc3MuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRh
Y3RzL0NvbnRhY3RBZGRyZXNzLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRhY3RzL0NvbnRhY3RBZGRyZXNzLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVs
ZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RT
LCAKKyAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgXSBDb250YWN0QWRkcmVzcyB7CisgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZm9ybWF0dGVkOworICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nIHN0cmVldEFkZHJlc3M7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbG9jYWxp
dHk7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgcmVnaW9uOworICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHBvc3RhbENvZGU7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY291
bnRyeTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFk
ZHJlc3NBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdEFkZHJlc3NBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250
YWN0cy9Db250YWN0QWRkcmVzc0FycmF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250YWN0QWRkcmVzc0FycmF5LmgiCisKKyNp
ZiBFTkFCTEUoQ09OVEFDVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGFjdEFkZHJl
c3NBcnJheTo6Q29udGFjdEFkZHJlc3NBcnJheSgpCit7Cit9CisKK0NvbnRhY3RBZGRyZXNzKiBD
b250YWN0QWRkcmVzc0FycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlm
IChpbmRleCA+PSBtX2FkZHJlc3Nlcy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtX2FkZHJlc3Nlc1tpbmRleF0uZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nv
bnRhY3RzL0NvbnRhY3RBZGRyZXNzQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jb250YWN0cy9Db250YWN0QWRkcmVzc0FycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9jb250YWN0cy9Db250YWN0QWRkcmVzc0FycmF5LmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIENvbnRhY3RBZGRyZXNzQXJyYXlfaAorI2RlZmluZSBDb250YWN0QWRk
cmVzc0FycmF5X2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RB
ZGRyZXNzLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RBZGRyZXNz
QXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0QWRkcmVzc0FycmF5PiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFjdEFkZHJlc3NBcnJheT4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdEFkZHJlc3NBcnJheSgpKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3Nl
cy5zaXplKCk7IH0KKyAgICBDb250YWN0QWRkcmVzcyogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8Q29udGFjdEFkZHJl
c3M+KTsKKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc2VzLmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fYWRkcmVzc2VzLmNsZWFyKCk7IH0KKyAg
ICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENvbnRhY3RBZGRyZXNzPiBhZGRyZXNzKSB7IG1fYWRk
cmVzc2VzLmFwcGVuZChhZGRyZXNzKTsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3RBZGRyZXNz
QXJyYXkoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q29udGFjdEFkZHJlc3M+ID4gbV9hZGRyZXNz
ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09O
VEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0QWRkcmVzc0FycmF5X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNzQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNzQXJyYXkuaWRsCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFkZHJlc3NBcnJheS5pZGwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgY29yZSB7CisKKyAgICBpbnRlcmZhY2UgWwor
ICAgICAgICBDb25kaXRpb25hbD1DT05UQUNUUywKKyAgICAgICAgSGFzSW5kZXhHZXR0ZXIsCisg
ICAgICAgIE5vU3RhdGljVGFibGVzCisgICAgXSBDb250YWN0QWRkcmVzc0FycmF5IHsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICBDb250
YWN0QWRkcmVzcyBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9
OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QXJyYXkuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250
YWN0QXJyYXkuaCIKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitDb250YWN0QXJyYXk6OkNvbnRhY3RBcnJheSgpCit7Cit9CisKK0NvbnRhY3QqIENvbnRh
Y3RBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPj0g
bV9jb250YWN0cy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2NvbnRh
Y3RzW2luZGV4XS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKENPTlRBQ1RTKQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFj
dEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QXJy
YXkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ29udGFjdEFycmF5X2gKKyNk
ZWZpbmUgQ29udGFjdEFycmF5X2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUg
IkNvbnRhY3QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFjdEFycmF5
IDogcHVibGljIFJlZkNvdW50ZWQ8Q29udGFjdEFycmF5PiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q29udGFjdEFycmF5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb250YWN0QXJyYXkoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWN0cy5zaXplKCk7IH0KKyAgICBDb250YWN0KiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwg
UGFzc1JlZlB0cjxDb250YWN0Pik7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRhY3RzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fY29udGFjdHMu
Y2xlYXIoKTsgfQorICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q29udGFjdD4gY29udGFjdCkg
eyBtX2NvbnRhY3RzLmFwcGVuZChjb250YWN0KTsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3RB
cnJheSgpOworCisgICAgVmVjdG9yPFJlZlB0cjxDb250YWN0PiA+IG1fY29udGFjdHM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisK
KyNlbmRpZiAvLyBDb250YWN0QXJyYXlfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMv
Q29udGFjdEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9D
b250YWN0QXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMv
Q29udGFjdEFycmF5LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsK
KworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLAorICAgICAg
ICBIYXNJbmRleEdldHRlciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIENvbnRhY3RB
cnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsK
KyAgICAgICAgQ29udGFjdCBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsK
KyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRh
Y3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ29udGFjdENvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShDT05U
QUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RBcnJheS5oIgorI2luY2x1ZGUgIkNvbnRhY3RDbGll
bnQuaCIKKyNpbmNsdWRlICJDb250YWN0RXJyb3IuaCIKKyNpbmNsdWRlICJDb250YWN0RmluZFBl
bmRpbmdPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDb250YWN0UGVuZGluZ09wZXJhdGlvbi5oIgor
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb250YWN0Q29udHJvbGxlcjo6Q29u
dGFjdENvbnRyb2xsZXIoUGFnZSogcGFnZSwgQ29udGFjdENsaWVudCogY2xpZW50KQorICAgIDog
bV9wYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZpbmRDYWxsYmFj
aygwKQorICAgICwgbV9lcnJvckNhbGxiYWNrKDApCisgICAgLCBtX3BlbmRpbmdPcGVyYXRpb24o
MCkKK3sKK30KKworQ29udGFjdENvbnRyb2xsZXI6On5Db250YWN0Q29udHJvbGxlcigpCit7Cit9
CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKCkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZXF1ZXN0UGVybWlzc2lvbigpOworfQor
Cit2b2lkIENvbnRhY3RDb250cm9sbGVyOjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCgpCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2FuY2VsUGVybWlzc2lvblJlcXVl
c3QoKTsKK30KKworc3RhdGljIHZvaWQgY2FsbEZpbmRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQor
eworICAgIENvbnRhY3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8Q29udGFj
dENvbnRyb2xsZXIqPihjb250ZXh0KTsKKyAgICBpZiAoY29udHJvbGxlci0+ZmluZENhbGxiYWNr
KCkpCisgICAgICAgIGNvbnRyb2xsZXItPmZpbmRDYWxsYmFjaygpLT5vbnN1Y2Nlc3MoY29udHJv
bGxlci0+Y29udGFjdHMoKSk7CisKKyAgICBjb250cm9sbGVyLT5jbGVhcigpOworfQorCitzdGF0
aWMgdm9pZCBjYWxsRXJyb3JDYWxsYmFjayh2b2lkKiBjb250ZXh0KQoreworICAgIENvbnRhY3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8Q29udGFjdENvbnRyb2xsZXIqPihj
b250ZXh0KTsKKyAgICBpZiAoY29udHJvbGxlci0+ZXJyb3JDYWxsYmFjaygpKQorICAgICAgICBj
b250cm9sbGVyLT5lcnJvckNhbGxiYWNrKCktPm9uZXJyb3IoY29udHJvbGxlci0+ZXJyb3IoKSk7
CisKKyAgICBjb250cm9sbGVyLT5jbGVhcigpOworfQorCit2b2lkIENvbnRhY3RDb250cm9sbGVy
Ojpjb250YWN0RmluZGVkKENvbnRhY3RBcnJheSogY29udGFjdHMpCit7CisgICAgbV9jb250YWN0
cyA9IGNvbnRhY3RzOworICAgIGNhbGxPbk1haW5UaHJlYWQoY2FsbEZpbmRDYWxsYmFjaywgdGhp
cyk7Cit9CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OmVycm9yT2NjdXJyZWQoQ29udGFjdEVy
cm9yKiBlcnJvcikKK3sKKyAgICBtX2Vycm9yID0gZXJyb3I7CisgICAgY2FsbE9uTWFpblRocmVh
ZChjYWxsRXJyb3JDYWxsYmFjaywgdGhpcyk7Cit9CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6
OmZpbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBmaWVsZHMsIFBhc3NSZWZQdHI8Q29udGFjdEZpbmRDYWxsYmFjaz4gZmluZENhbGxi
YWNrLCBQYXNzUmVmUHRyPENvbnRhY3RFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNz
UmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAobV9wZW5kaW5n
T3BlcmF0aW9uKSB7CisgICAgICAgIFJlZlB0cjxDb250YWN0RXJyb3I+IGVycm9yID0gQ29udGFj
dEVycm9yOjpjcmVhdGUoQ29udGFjdEVycm9yOjpQRU5ESU5HX09QRVJBVElPTl9FUlJPUik7Cisg
ICAgICAgIGVycm9yT2NjdXJyZWQoZXJyb3IuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9wZW5kaW5nT3BlcmF0aW9uID0gQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9u
OjpjcmVhdGUoY29udGV4dCwgY2xpZW50KCksIGZpZWxkcy5nZXQoKSwgb3B0aW9ucy5nZXQoKSk7
CisKKyAgICBtX2ZpbmRDYWxsYmFjayA9IGZpbmRDYWxsYmFjazsKKyAgICBtX2Vycm9yQ2FsbGJh
Y2sgPSBlcnJvckNhbGxiYWNrOworCisgICAgbV9jbGllbnQtPnJlcXVlc3RQZXJtaXNzaW9uKCk7
Cit9CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OnNldEFsbG93ZWQoYm9vbCBhbGxvd2VkKQor
eworICAgIGlmIChhbGxvd2VkKQorICAgICAgICBvbkNvbmZpcm1lZCgpOworICAgIGVsc2UKKyAg
ICAgICAgb25EZW5pZWQoKTsKK30KKwordm9pZCBDb250YWN0Q29udHJvbGxlcjo6b25Db25maXJt
ZWQoKQoreworICAgIGlmIChtX3BlbmRpbmdPcGVyYXRpb24pCisgICAgICAgIG1fcGVuZGluZ09w
ZXJhdGlvbi0+c3RhcnQoKTsKK30KKwordm9pZCBDb250YWN0Q29udHJvbGxlcjo6b25EZW5pZWQo
KQoreworICAgIFJlZlB0cjxDb250YWN0RXJyb3I+IGVycm9yID0gQ29udGFjdEVycm9yOjpjcmVh
dGUoQ29udGFjdEVycm9yOjpQRVJNSVNTSU9OX0RFTklFRF9FUlJPUik7CisgICAgZXJyb3JPY2N1
cnJlZChlcnJvci5nZXQoKSk7Cit9CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OmNsZWFyKCkK
K3sKKyAgICBtX2ZpbmRDYWxsYmFjayA9IDA7CisgICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKwor
ICAgIGlmIChtX3BlbmRpbmdPcGVyYXRpb24pCisgICAgICAgIG1fcGVuZGluZ09wZXJhdGlvbi0+
c3RvcCgpOworICAgIG1fcGVuZGluZ09wZXJhdGlvbiA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIENvbnRhY3RDb250cm9sbGVyX2gKKyNkZWZpbmUgQ29udGFjdENvbnRy
b2xsZXJfaAorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29udGFjdEVycm9y
Q2FsbGJhY2suaCIKKyNpbmNsdWRlICJDb250YWN0RmluZENhbGxiYWNrLmgiCisjaW5jbHVkZSAi
Q29udGFjdEZpbmRPcHRpb25zLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFnZTsKK2NsYXNzIEZyYW1lOworY2xhc3MgRE9N
U3RyaW5nTGlzdDsKK2NsYXNzIENvbnRhY3RBcnJheTsKK2NsYXNzIENvbnRhY3RDbGllbnQ7Citj
bGFzcyBDb250YWN0UGVuZGluZ09wZXJhdGlvbjsKKworY2xhc3MgQ29udGFjdENvbnRyb2xsZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRhY3RDb250cm9sbGVyKTsKK3B1YmxpYzoK
KyAgICBDb250YWN0Q29udHJvbGxlcihQYWdlKiwgQ29udGFjdENsaWVudCopOworICAgIH5Db250
YWN0Q29udHJvbGxlcigpOworCisgICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigpOworICAgIHZv
aWQgY2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKTsKKworICAgIHZvaWQgY29udGFjdEZpbmRlZChD
b250YWN0QXJyYXkqKTsKKyAgICB2b2lkIGVycm9yT2NjdXJyZWQoQ29udGFjdEVycm9yKik7CisK
KyAgICB2b2lkIGZpbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4sIFBhc3NSZWZQdHI8Q29udGFjdEZpbmRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Q29u
dGFjdEVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4pOworICAg
IHZvaWQgY2FuY2VsKCk7CisgICAgdm9pZCBjbGVhcigpOworCisgICAgQ29udGFjdENsaWVudCog
Y2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBDb250YWN0RXJyb3IqIGVycm9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lcnJvci5nZXQoKTsgfQorICAgIENvbnRhY3RBcnJheSogY29udGFj
dHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhY3RzLmdldCgpOyB9CisgICAgQ29udGFjdEZpbmRD
YWxsYmFjayogZmluZENhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9maW5kQ2FsbGJhY2suZ2V0
KCk7IH0KKyAgICBDb250YWN0RXJyb3JDYWxsYmFjayogZXJyb3JDYWxsYmFjaygpIGNvbnN0IHsg
cmV0dXJuIG1fZXJyb3JDYWxsYmFjay5nZXQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0QWxsb3dl
ZChib29sKTsKKworcHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgQ29udGFjdENsaWVu
dCogbV9jbGllbnQ7CisgICAgUmVmUHRyPENvbnRhY3RBcnJheT4gbV9jb250YWN0czsKKyAgICBS
ZWZQdHI8Q29udGFjdEVycm9yPiBtX2Vycm9yOworICAgIFJlZlB0cjxDb250YWN0RmluZENhbGxi
YWNrPiBtX2ZpbmRDYWxsYmFjazsKKyAgICBSZWZQdHI8Q29udGFjdEVycm9yQ2FsbGJhY2s+IG1f
ZXJyb3JDYWxsYmFjazsKKyAgICBSZWZQdHI8Q29udGFjdFBlbmRpbmdPcGVyYXRpb24+IG1fcGVu
ZGluZ09wZXJhdGlvbjsKKworICAgIHZvaWQgb25Db25maXJtZWQoKTsKKyAgICB2b2lkIG9uRGVu
aWVkKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jb250YWN0cy9Db250YWN0RXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0RXJyb3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RFcnJvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBDb250YWN0RXJyb3JfaAorI2RlZmluZSBDb250YWN0RXJyb3JfaAorCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5B
QkxFKENPTlRBQ1RTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RFcnJv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RFcnJvcj4geworcHVibGljOgorICAgIGVudW0g
RXJyb3JDb2RlIHsKKyAgICAgICAgVU5LTk9XTl9FUlJPUiA9IDAsCisgICAgICAgIElOVkFMSURf
QVJHVU1FTlRfRVJST1IgPSAxLAorICAgICAgICBUSU1FT1VUX0VSUk9SID0gMiwKKyAgICAgICAg
UEVORElOR19PUEVSQVRJT05fRVJST1IgPSAzLAorICAgICAgICBJT19FUlJPUiA9IDQsCisgICAg
ICAgIE5PVF9TVVBQT1JURURfRVJST1IgPSA1LAorICAgICAgICBQRVJNSVNTSU9OX0RFTklFRF9F
UlJPUiA9IDIwIAorICAgIH07CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RXJyb3I+
IGNyZWF0ZShFcnJvckNvZGUgY29kZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RFcnJv
cihjb2RlKSk7IH0KKyAgICAKKyAgICBFcnJvckNvZGUgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29udGFjdEVycm9yKEVycm9yQ29kZSBj
b2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgRXJyb3JDb2RlIG1fY29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKKworI2VuZGlmIC8vIENvbnRhY3RFcnJvcl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RXJyb3IuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RFcnJvci5pZGwJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RXJyb3IuaWRsCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5n
IEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorKi8KKworbW9kdWxlIGNvcmUgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQ29uZGl0aW9uYWw9Q09OVEFDVFMKKyAgICBdIENvbnRhY3RFcnJvciB7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCBjb2RlOworCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IFVOS05PV05fRVJST1IgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBJTlZBTElEX0FSR1VNRU5UX0VSUk9SID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgVElNRU9VVF9FUlJPUiA9IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBF
TkRJTkdfT1BFUkFUSU9OX0VSUk9SID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
SU9fRVJST1IgPSA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RfU1VQUE9SVEVE
X0VSUk9SID0gNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUEVSTUlTU0lPTl9ERU5J
RURfRVJST1IgPSAyMDsKKyAgICB9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0
cy9Db250YWN0RXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRhY3RzL0NvbnRhY3RFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDQzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNz
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBDb250YWN0RXJyb3JDYWxsYmFja19oCisjZGVmaW5lIENvbnRhY3RFcnJv
ckNhbGxiYWNrX2gKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ29udGFjdEVycm9yOworCitjbGFzcyBDb250YWN0RXJyb3JDYWxsYmFj
ayA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RFcnJvckNhbGxiYWNrPiwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgQ29udGFjdEVycm9yQ2FsbGJhY2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykg
eyB9CisgICAgdmlydHVhbCB+Q29udGFjdEVycm9yQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgb25lcnJvcihDb250YWN0RXJyb3IqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBQb3NpdGlv
bkVycm9yQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZp
ZWxkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxk
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ29udGFjdEZpZWxkX2gKKyNkZWZp
bmUgQ29udGFjdEZpZWxkX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0RmllbGQgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250
YWN0RmllbGQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmllbGQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RGaWVs
ZCgpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHByZWYpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RGaWVsZCh0eXBlLCB2YWx1ZSwg
cHJlZikpOworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBl
ID0gdHlwZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUg
PSB2YWx1ZTsgfQorICAgIGJvb2wgcHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZjsgfQorICAg
IHZvaWQgc2V0UHJlZihib29sIHByZWYpIHsgbV9wcmVmID0gcHJlZjsgfQorCitwcml2YXRlOgor
ICAgIENvbnRhY3RGaWVsZCgpIHsgfQorICAgIENvbnRhY3RGaWVsZChjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgcHJlZikKKyAgICAgICAgOiBtX3R5cGUodHlw
ZSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fcHJlZihwcmVmKQorICAg
IHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFN0cmluZyBtX3ZhbHVlOworICAg
IGJvb2wgbV9wcmVmOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8gQ29udGFjdEZpZWxkX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaWVsZC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaWVsZC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCittb2R1bGUgY29yZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25h
bD1DT05UQUNUUywgCisgICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgIF0gQ29udGFjdEZpZWxk
IHsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOworICAgICAgICBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHZhbHVlOworICAgICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBwcmVmOworICAgIH07
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXku
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxk
QXJyYXkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNvbnRhY3RGaWVsZEFycmF5LmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGFjdEZpZWxkQXJyYXk6OkNvbnRhY3RGaWVsZEFy
cmF5KCkKK3sKK30KKworQ29udGFjdEZpZWxkKiBDb250YWN0RmllbGRBcnJheTo6aXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPj0gbV9maWVsZHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9maWVsZHNbaW5kZXhdLmdldCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaWVsZEFycmF5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0RmllbGRBcnJheV9oCisjZGVm
aW5lIENvbnRhY3RGaWVsZEFycmF5X2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1
ZGUgIkNvbnRhY3RGaWVsZC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250
YWN0RmllbGRBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RGaWVsZEFycmF5PiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RGaWVsZEFycmF5KCkp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRz
LnNpemUoKTsgfQorICAgIENvbnRhY3RGaWVsZCogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CisgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkPik7
CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZpZWxkcy5pc0VtcHR5KCk7
IH0KKyAgICB2b2lkIGNsZWFyKCkgeyBtX2ZpZWxkcy5jbGVhcigpOyB9CisgICAgdm9pZCBhcHBl
bmQoUGFzc1JlZlB0cjxDb250YWN0RmllbGQ+IGZpZWxkKSB7IG1fZmllbGRzLmFwcGVuZChmaWVs
ZCk7IH0KKworcHJpdmF0ZToKKyAgICBDb250YWN0RmllbGRBcnJheSgpOworCisgICAgVmVjdG9y
PFJlZlB0cjxDb250YWN0RmllbGQ+ID4gbV9maWVsZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0
RmllbGRBcnJheV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGRB
cnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZp
ZWxkQXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdEZpZWxkQXJyYXkuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIGNvcmUg
eworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9Q09OVEFDVFMsCisgICAg
ICAgIEhhc0luZGV4R2V0dGVyLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gQ29udGFj
dEZpZWxkQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBs
ZW5ndGg7CisgICAgICAgIENvbnRhY3RGaWVsZCBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBs
b25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdEZpbmRDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3RGaW5kQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nv
bnRhY3RzL0NvbnRhY3RGaW5kQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
Zm5kZWYgQ29udGFjdEZpbmRDYWxsYmFja19oCisjZGVmaW5lIENvbnRhY3RGaW5kQ2FsbGJhY2tf
aAorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDb250YWN0QXJyYXk7CisKK2NsYXNzIENvbnRhY3RGaW5kQ2FsbGJhY2sgOiBwdWJsaWMg
UmVmQ291bnRlZDxDb250YWN0RmluZENhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CitwdWJsaWM6CisgICAgQ29udGFjdEZpbmRDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KSA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKSB7IH0KKyAgICB2aXJ0
dWFsIH5Db250YWN0RmluZENhbGxiYWNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uc3VjY2Vz
cyhDb250YWN0QXJyYXkqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0RmluZENhbGxiYWNr
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kT3B0aW9ucy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpbmRPcHRp
b25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RGaW5kT3B0aW9u
c19oCisjZGVmaW5lIENvbnRhY3RGaW5kT3B0aW9uc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDb250YWN0RmluZE9wdGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0Rmlu
ZE9wdGlvbnM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmluZE9w
dGlvbnM+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0RmluZE9wdGlvbnMo
KSk7IH0KKworICAgIGNvbnN0IFN0cmluZyYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0
ZXI7IH0KKyAgICB2b2lkIHNldEZpbHRlcihjb25zdCBTdHJpbmcmIGZpbHRlcikgeyBtX2ZpbHRl
ciA9IGZpbHRlcjsgfQorICAgIGJvb2wgaXNNdWx0aXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVs
dGlwbGU7IH0KKyAgICB2b2lkIHNldE11bHRpcGxlKGJvb2wgbXVsdGlwbGUpIHsgbV9tdWx0aXBs
ZSA9IG11bHRpcGxlOyB9CisKK3ByaXZhdGU6CisgICAgQ29udGFjdEZpbmRPcHRpb25zKCkKKyAg
ICAgICAgOiBtX211bHRpcGxlKHRydWUpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX2Zp
bHRlcjsKKyAgICBib29sIG1fbXVsdGlwbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0RmluZE9w
dGlvbnNfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmluZFBlbmRp
bmdPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDk4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaW5k
UGVuZGluZ09wZXJhdGlvbi5oIgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAi
Q29udGFjdENsaWVudC5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaW5kT3B0aW9ucy5oIgorI2luY2x1
ZGUgIkNvbnRhY3RUaHJlYWQuaCIKKyNpbmNsdWRlICJDb250YWN0VGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgQ29udGFjdEZpbmRQZW5kaW5n
T3BlcmF0aW9uOjpDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgQ29udGFjdENsaWVudCogY2xpZW50LCBET01TdHJpbmdMaXN0KiBmaWVs
ZHMsIENvbnRhY3RGaW5kT3B0aW9ucyogb3B0aW9ucykKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9maWVsZHMoZmllbGRzKQorICAgICwg
bV9vcHRpb25zKG9wdGlvbnMpCit7Cit9CisKK1Bhc3NSZWZQdHI8Q29udGFjdEZpbmRQZW5kaW5n
T3BlcmF0aW9uPiBDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OmNyZWF0ZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBDb250YWN0Q2xpZW50KiBjbGllbnQsIERPTVN0cmluZ0xp
c3QqIGZpZWxkcywgQ29udGFjdEZpbmRPcHRpb25zKiBvcHRpb25zKQoreworICAgIFJlZlB0cjxD
b250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24+IHByb3h5ID0gYWRvcHRSZWYobmV3IENvbnRhY3RG
aW5kUGVuZGluZ09wZXJhdGlvbihjb250ZXh0LCBjbGllbnQsIGZpZWxkcywgb3B0aW9ucykpOwor
CisgICAgLy8gSG9sZCBhbiByZWYgc28gdGhhdCB0aGUgaW5zdGFuY2Ugd2lsbCBub3QgZ2V0IGRl
bGV0ZWQgd2hpbGUgdGhlcmUgYXJlIHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICAvLyBU
aGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiBkZXJlZlByb3h5T25Db250ZXh0IGJlbG93
LgorICAgIHByb3h5LT5yZWYoKTsKKworICAgIHJldHVybiBwcm94eS5yZWxlYXNlKCk7Cit9CisK
K0NvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6fkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlv
bigpCit7Cit9CisKK0NvbnRhY3RUaHJlYWQqIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6
Y29udGFjdFRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgIEFTU0VSVChtX2NvbnRleHQtPmNvbnRhY3RUaHJlYWQoKSk7CisgICAgcmV0dXJu
IG1fY29udGV4dC0+Y29udGFjdFRocmVhZCgpOworfQorCit2b2lkIENvbnRhY3RGaW5kUGVuZGlu
Z09wZXJhdGlvbjo6c3RhcnQoKQoreworICAgIGNvbnRhY3RUaHJlYWQoKS0+cG9zdFRhc2soY3Jl
YXRlQ29udGFjdFRocmVhZFRhc2sodGhpcywgJkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6
c3RhcnRPbkNvbnRhY3RUaHJlYWQpKTsKK30KKwordm9pZCBDb250YWN0RmluZFBlbmRpbmdPcGVy
YXRpb246OnN0YXJ0T25Db250YWN0VGhyZWFkKCkKK3sKKyAgICBpZiAoIWNsaWVudCgpKQorICAg
ICAgICByZXR1cm47CisgICAgY2xpZW50KCktPmZpbmQobV9maWVsZHMsIG1fb3B0aW9ucyk7Cit9
CisKK3ZvaWQgQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uOjpzdG9wKCkKK3sKKyAgICBzZXRD
bGllbnQoMCk7CisKKyAgICBjb250YWN0VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNvbnRhY3RU
aHJlYWRUYXNrKHRoaXMsICZDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OnN0b3BPbkNvbnRh
Y3RUaHJlYWQpKTsKK30KKworc3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uKiBwcm94eSkKK3sK
KyAgICBBU1NFUlQocHJveHktPmhhc09uZVJlZigpKTsKKyAgICBwcm94eS0+ZGVyZWYoKTsKK30K
Kwordm9pZCBDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OnN0b3BPbkNvbnRhY3RUaHJlYWQo
KQoreworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlBy
b3h5T25Db250ZXh0LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kUGVuZGluZ09wZXJh
dGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZp
bmRQZW5kaW5nT3BlcmF0aW9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENv
bnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbl9oCisjZGVmaW5lIENvbnRhY3RGaW5kUGVuZGluZ09w
ZXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJDb250YWN0UGVu
ZGluZ09wZXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0Q2xpZW50
OworY2xhc3MgQ29udGFjdFRocmVhZDsKK2NsYXNzIENvbnRhY3RGaW5kT3B0aW9uczsKK2NsYXNz
IERPTVN0cmluZ0xpc3Q7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBD
b250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24gOiBwdWJsaWMgQ29udGFjdFBlbmRpbmdPcGVyYXRp
b24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRhY3RGaW5kUGVuZGluZ09w
ZXJhdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBDb250YWN0Q2xpZW50Kiwg
RE9NU3RyaW5nTGlzdCosIENvbnRhY3RGaW5kT3B0aW9ucyopOworICAgIHZpcnR1YWwgfkNvbnRh
Y3RGaW5kUGVuZGluZ09wZXJhdGlvbigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQg
c3RvcCgpOworCitwcml2YXRlOgorICAgIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgQ29udGFjdENsaWVudCosIERPTVN0cmluZ0xpc3QqLCBDb250
YWN0RmluZE9wdGlvbnMqKTsKKworICAgIENvbnRhY3RUaHJlYWQqIGNvbnRhY3RUaHJlYWQoKTsK
KworICAgIHZvaWQgc3RhcnRPbkNvbnRhY3RUaHJlYWQoKTsKKyAgICB2b2lkIHN0b3BPbkNvbnRh
Y3RUaHJlYWQoKTsKKyAgICBDb250YWN0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorICAgIHZvaWQgc2V0Q2xpZW50KENvbnRhY3RDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVu
dCA9IGNsaWVudDsgfQorCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0Owor
ICAgIENvbnRhY3RDbGllbnQqIG1fY2xpZW50OworICAgIERPTVN0cmluZ0xpc3QqIG1fZmllbGRz
OworICAgIENvbnRhY3RGaW5kT3B0aW9ucyogbV9vcHRpb25zOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8gQ29u
dGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3ROYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdE5hbWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRh
Y3ROYW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3ROYW1lX2gK
KyNkZWZpbmUgQ29udGFjdE5hbWVfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3ROYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8
Q29udGFjdE5hbWU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0TmFt
ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdE5h
bWUoKSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRhY3ROYW1lPiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBmb3JtYXR0ZWQsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgY29uc3Qg
U3RyaW5nJiBnaXZlbk5hbWUsIGNvbnN0IFN0cmluZyYgbWlkZGxlTmFtZSwgY29uc3QgU3RyaW5n
JiBob25vcmlmaWNQcmVmaXgsIGNvbnN0IFN0cmluZyYgaG9ub3JpZmljU3VmZml4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0TmFtZShmb3JtYXR0ZWQsIGZhbWls
eU5hbWUsIGdpdmVuTmFtZSwgbWlkZGxlTmFtZSwgaG9ub3JpZmljUHJlZml4LCBob25vcmlmaWNT
dWZmaXgpKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIGZvcm1hdHRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9ybWF0dGVkOyB9CisgICAgdm9pZCBzZXRGb3JtYXR0ZWQoY29uc3QgU3RyaW5n
JiBmb3JtYXR0ZWQpIHsgbV9mb3JtYXR0ZWQgPSBmb3JtYXR0ZWQ7IH0KKyAgICBjb25zdCBTdHJp
bmcmIGZhbWlseU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseU5hbWU7IH0KKyAgICB2b2lk
IHNldEZhbWlseU5hbWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKSB7IG1fZmFtaWx5TmFtZSA9
IGZhbWlseU5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGdpdmVuTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2l2ZW5OYW1lOyB9CisgICAgdm9pZCBzZXRHaXZlbk5hbWUoY29uc3QgU3RyaW5nJiBn
aXZlbk5hbWUpIHsgbV9naXZlbk5hbWUgPSBnaXZlbk5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcg
bWlkZGxlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWlkZGxlTmFtZTsgfQorICAgIHZvaWQgc2V0
TWlkZGxlTmFtZShjb25zdCBTdHJpbmcmIG1pZGRsZU5hbWUpIHsgbV9taWRkbGVOYW1lID0gbWlk
ZGxlTmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgaG9ub3JpZmljUHJlZml4KCkgY29uc3QgeyBy
ZXR1cm4gbV9ob25vcmlmaWNQcmVmaXg7IH0KKyAgICB2b2lkIHNldEhvbm9yaWZpY1ByZWZpeChj
b25zdCBTdHJpbmcmIGhvbm9yaWZpY1ByZWZpeCkgeyBtX2hvbm9yaWZpY1ByZWZpeCA9IGhvbm9y
aWZpY1ByZWZpeDsgfQorICAgIGNvbnN0IFN0cmluZyYgaG9ub3JpZmljU3VmZml4KCkgY29uc3Qg
eyByZXR1cm4gbV9ob25vcmlmaWNTdWZmaXg7IH0KKyAgICB2b2lkIHNldEhvbm9yaWZpY1N1ZmZp
eChjb25zdCBTdHJpbmcmIGhvbm9yaWZpY1N1ZmZpeCkgeyBtX2hvbm9yaWZpY1ByZWZpeCA9IGhv
bm9yaWZpY1N1ZmZpeDsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3ROYW1lKCkKKyAgICB7Cisg
ICAgfQorICAgIENvbnRhY3ROYW1lKGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkLCBjb25zdCBTdHJp
bmcmIGZhbWlseU5hbWUsIGNvbnN0IFN0cmluZyYgZ2l2ZW5OYW1lLCBjb25zdCBTdHJpbmcmIG1p
ZGRsZU5hbWUsIGNvbnN0IFN0cmluZyYgaG9ub3JpZmljUHJlZml4LCBjb25zdCBTdHJpbmcmIGhv
bm9yaWZpY1N1ZmZpeCkKKyAgICAgICAgOiBtX2Zvcm1hdHRlZChmb3JtYXR0ZWQpCisgICAgICAg
ICwgbV9mYW1pbHlOYW1lKGZhbWlseU5hbWUpCisgICAgICAgICwgbV9naXZlbk5hbWUoZ2l2ZW5O
YW1lKQorICAgICAgICAsIG1fbWlkZGxlTmFtZShtaWRkbGVOYW1lKQorICAgICAgICAsIG1faG9u
b3JpZmljUHJlZml4KGhvbm9yaWZpY1ByZWZpeCkKKyAgICAgICAgLCBtX2hvbm9yaWZpY1N1ZmZp
eChob25vcmlmaWNTdWZmaXgpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX2Zvcm1hdHRl
ZDsKKyAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOworICAgIFN0cmluZyBtX2dpdmVuTmFtZTsKKyAg
ICBTdHJpbmcgbV9taWRkbGVOYW1lOworICAgIFN0cmluZyBtX2hvbm9yaWZpY1ByZWZpeDsKKyAg
ICBTdHJpbmcgbV9ob25vcmlmaWNTdWZmaXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0TmFtZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0TmFtZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE5hbWUuaWRsCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE5hbWUuaWRsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworbW9kdWxlIGNvcmUgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAg
Q29uZGl0aW9uYWw9Q09OVEFDVFMsIAorICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICBdIENv
bnRhY3ROYW1lIHsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBmb3JtYXR0ZWQ7CisgICAg
ICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZmFtaWx5TmFtZTsKKyAgICAgICAgYXR0cmlidXRlIERP
TVN0cmluZyBnaXZlbk5hbWU7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbWlkZGxlTmFt
ZTsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBob25vcmlmaWNQcmVmaXg7CisgICAgICAg
IGF0dHJpYnV0ZSBET01TdHJpbmcgaG9ub3JpZmljU3VmZml4OworICAgIH07Cit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0T3JnYW5pemF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0T3JnYW5pemF0aW9uX2gKKyNk
ZWZpbmUgQ29udGFjdE9yZ2FuaXphdGlvbl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFjdE9yZ2FuaXphdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPENvbnRhY3RPcmdhbml6YXRpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb250YWN0T3JnYW5pemF0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0T3JnYW5pemF0aW9uKCkpOworICAgIH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDb250YWN0T3JnYW5pemF0aW9uPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlcGFydG1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RPcmdhbml6YXRpb24obmFt
ZSwgZGVwYXJ0bWVudCwgdGl0bGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
JiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRlcGFydG1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RlcGFydG1lbnQ7IH0KKyAgICB2b2lkIHNldERlcGFydG1lbnQo
Y29uc3QgU3RyaW5nJiBkZXBhcnRtZW50KSB7IG1fZGVwYXJ0bWVudCA9IGRlcGFydG1lbnQ7IH0K
KyAgICBjb25zdCBTdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAg
IHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0K
KworcHJpdmF0ZToKKyAgICBDb250YWN0T3JnYW5pemF0aW9uKCkgeyB9CisgICAgQ29udGFjdE9y
Z2FuaXphdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVwYXJ0bWVudCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKKyAgICAgICAgOiBtX25hbWUobmFtZSkKKyAgICAgICAgLCBt
X2RlcGFydG1lbnQoZGVwYXJ0bWVudCkKKyAgICAgICAgLCBtX3RpdGxlKHRpdGxlKQorICAgIHsK
KyAgICB9CisKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX2RlcGFydG1lbnQ7Cisg
ICAgU3RyaW5nIG1fdGl0bGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0T3JnYW5pemF0aW9uX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb24uaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb24u
aWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2Fu
aXphdGlvbi5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgY29yZSB7CisKKyAg
ICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1DT05UQUNUUywgCisgICAgICAgIE9t
aXRDb25zdHJ1Y3RvcgorICAgIF0gQ29udGFjdE9yZ2FuaXphdGlvbiB7CisgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmcgbmFtZTsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBkZXBhcnRt
ZW50OworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRpdGxlOworICAgIH07Cit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0T3JnYW5pemF0aW9uQXJyYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb25B
cnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0
T3JnYW5pemF0aW9uQXJyYXkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRhY3RPcmdhbml6YXRpb25BcnJheS5oIgorCisjaWYg
RU5BQkxFKENPTlRBQ1RTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRhY3RPcmdhbml6
YXRpb25BcnJheTo6Q29udGFjdE9yZ2FuaXphdGlvbkFycmF5KCkKK3sKK30KKworQ29udGFjdE9y
Z2FuaXphdGlvbiogQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAoreworICAgIGlmIChpbmRleCA+PSBtX29yZ2FuaXphdGlvbnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9vcmdhbml6YXRpb25zW2luZGV4XS5nZXQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb25BcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb25BcnJh
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2Fu
aXphdGlvbkFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RP
cmdhbml6YXRpb25BcnJheV9oCisjZGVmaW5lIENvbnRhY3RPcmdhbml6YXRpb25BcnJheV9oCisK
KyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJDb250YWN0T3JnYW5pemF0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RPcmdhbml6YXRpb25BcnJh
eSA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdE9yZ2FuaXphdGlv
bkFycmF5KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3JnYW5pemF0aW9ucy5zaXplKCk7IH0KKyAgICBDb250YWN0T3JnYW5pemF0aW9uKiBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgUGFz
c1JlZlB0cjxDb250YWN0T3JnYW5pemF0aW9uPik7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBtX29yZ2FuaXphdGlvbnMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhcigp
IHsgbV9vcmdhbml6YXRpb25zLmNsZWFyKCk7IH0KKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRy
PENvbnRhY3RPcmdhbml6YXRpb24+IG9yZ2FuaXphdGlvbikgeyBtX29yZ2FuaXphdGlvbnMuYXBw
ZW5kKG9yZ2FuaXphdGlvbik7IH0KKworcHJpdmF0ZToKKyAgICBDb250YWN0T3JnYW5pemF0aW9u
QXJyYXkoKTsKKworICAgIFZlY3RvcjxSZWZQdHI8Q29udGFjdE9yZ2FuaXphdGlvbj4gPiBtX29y
Z2FuaXphdGlvbnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0T3JnYW5pemF0aW9uQXJyYXlfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0T3JnYW5pemF0
aW9uQXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdE9yZ2FuaXphdGlvbkFycmF5LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVs
ZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RT
LAorICAgICAgICBIYXNJbmRleEdldHRlciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBd
IENvbnRhY3RPcmdhbml6YXRpb25BcnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgQ29udGFjdE9yZ2FuaXphdGlvbiBpdGVtKGlu
IFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFBlbmRpbmdPcGVyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0UGVuZGluZ09wZXJhdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFBlbmRpbmdPcGVyYXRp
b24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ29udGFjdFBlbmRpbmdPcGVy
YXRpb25faAorI2RlZmluZSBDb250YWN0UGVuZGluZ09wZXJhdGlvbl9oCisKKyNpZiBFTkFCTEUo
Q09OVEFDVFMpCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENvbnRhY3RQZW5kaW5nT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8Q29udGFjdFBlbmRpbmdPcGVyYXRpb24+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQg
c3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAv
LyBDb250YWN0UGVuZGluZ09wZXJhdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0
cy9Db250YWN0VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0
cy9Db250YWN0VGhyZWFkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRh
Y3RzL0NvbnRhY3RUaHJlYWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RU
aHJlYWQuaCIKKworI2luY2x1ZGUgIkF1dG9kcmFpbmVkUG9vbC5oIgorI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb250YWN0VGhyZWFkOjpDb250YWN0VGhy
ZWFkKCkKKyAgICA6IG1fdGhyZWFkSUQoMCkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworfQor
CitDb250YWN0VGhyZWFkOjp+Q29udGFjdFRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fcXVldWUu
a2lsbGVkKCkpOworfQorCitib29sIENvbnRhY3RUaHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBNdXRl
eExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgaWYgKG1fdGhyZWFkSUQp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ29u
dGFjdFRocmVhZDo6Y29udGFjdFRocmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogQ29udGFjdCIp
OworICAgIHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkIENvbnRhY3RUaHJlYWQ6OnN0b3Ao
KQoreworICAgIG1fcXVldWUua2lsbCgpOworfQorCit2b2lkIENvbnRhY3RUaHJlYWQ6OnBvc3RU
YXNrKFBhc3NPd25QdHI8VGFzaz4gdGFzaykKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZCh0YXNrKTsK
K30KKworY2xhc3MgU2FtZUluc3RhbmNlUHJlZGljYXRlIHsKK3B1YmxpYzoKKyAgICBTYW1lSW5z
dGFuY2VQcmVkaWNhdGUoY29uc3Qgdm9pZCogaW5zdGFuY2UpIDogbV9pbnN0YW5jZShpbnN0YW5j
ZSkgeyB9CisgICAgYm9vbCBvcGVyYXRvcigpKENvbnRhY3RUaHJlYWQ6OlRhc2sqIHRhc2spIGNv
bnN0IHsgcmV0dXJuIHRhc2stPmluc3RhbmNlKCkgPT0gbV9pbnN0YW5jZTsgfQorcHJpdmF0ZToK
KyAgICBjb25zdCB2b2lkKiBtX2luc3RhbmNlOworfTsKKwordm9pZCBDb250YWN0VGhyZWFkOjp1
bnNjaGVkdWxlVGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpCit7CisgICAgU2FtZUluc3RhbmNl
UHJlZGljYXRlIHByZWRpY2F0ZShpbnN0YW5jZSk7CisgICAgbV9xdWV1ZS5yZW1vdmVJZihwcmVk
aWNhdGUpOworfQorCit2b2lkKiBDb250YWN0VGhyZWFkOjpjb250YWN0VGhyZWFkU3RhcnQodm9p
ZCogYXJnKQoreworICAgIENvbnRhY3RUaHJlYWQqIGNvbnRhY3RUaHJlYWQgPSBzdGF0aWNfY2Fz
dDxDb250YWN0VGhyZWFkKj4oYXJnKTsKKyAgICByZXR1cm4gY29udGFjdFRocmVhZC0+cnVuTG9v
cCgpOworfQorCit2b2lkKiBDb250YWN0VGhyZWFkOjpydW5Mb29wKCkKK3sKKyAgICB7CisgICAg
ICAgIC8vIFdhaXQgZm9yIENvbnRhY3RUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2
ZSBtX3RocmVhZElECisgICAgICAgIC8vIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUg
bWFpbiBsb29wLgorICAgICAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRl
eCk7CisgICAgfQorCisgICAgQXV0b2RyYWluZWRQb29sIHBvb2w7CisgICAgd2hpbGUgKE93blB0
cjxUYXNrPiB0YXNrID0gbV9xdWV1ZS53YWl0Rm9yTWVzc2FnZSgpKSB7CisgICAgICAgIHRhc2st
PnBlcmZvcm1UYXNrKCk7CisgICAgICAgIHBvb2wuY3ljbGUoKTsKKyAgICB9CisKKyAgICBkZXRh
Y2hUaHJlYWQobV90aHJlYWRJRCk7CisKKyAgICAvLyBDbGVhciB0aGUgc2VsZiByZWZwdHIsIHBv
c3NpYmx5IHJlc3VsdGluZyBpbiBkZWxldGlvbgorICAgIG1fc2VsZlJlZiA9IDA7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KENPTlRBQ1QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFRocmVhZC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFRocmVhZC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0VGhyZWFkX2gKKyNkZWZpbmUg
Q29udGFjdFRocmVhZF9oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlIDx3dGYv
TWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPENvbnRhY3RUaHJlYWQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b250YWN0VGhyZWFkPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDb250YWN0VGhyZWFkKCkpOworICAgIH0KKworICAgIH5Db250YWN0VGhyZWFkKCk7CisKKyAg
ICBib29sIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBjbGFzcyBUYXNrIHsKKyAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGFzayk7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpID0g
MDsKKyAgICAgICAgdm9pZCogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBUYXNrKHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFu
Y2UoaW5zdGFuY2UpIHsgfQorICAgICAgICB2b2lkKiBtX2luc3RhbmNlOworICAgIH07CisKKyAg
ICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOworCisgICAgdm9pZCB1bnNjaGVkdWxl
VGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpOworCitwcml2YXRlOgorICAgIENvbnRhY3RUaHJl
YWQoKTsKKworICAgIHN0YXRpYyB2b2lkKiBjb250YWN0VGhyZWFkU3RhcnQodm9pZCopOworICAg
IHZvaWQqIHJ1bkxvb3AoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAg
ICBSZWZQdHI8Q29udGFjdFRocmVhZD4gbV9zZWxmUmVmOworICAgIE1lc3NhZ2VRdWV1ZTxUYXNr
PiBtX3F1ZXVlOworCisgICAgTXV0ZXggbV90aHJlYWRDcmVhdGlvbk11dGV4OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5k
aWYgLy8gQ29udGFjdFRocmVhZF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250
YWN0VGhyZWFkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RUaHJlYWRUYXNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0
cy9Db250YWN0VGhyZWFkVGFzay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBD
b250YWN0VGhyZWFkVGFza19oCisjZGVmaW5lIENvbnRhY3RUaHJlYWRUYXNrX2gKKworI2luY2x1
ZGUgIkNvbnRhY3RUaHJlYWQuaCIKKyNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgorI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQ29udGFjdFRocmVhZFRhc2swIDogcHVibGljIENvbnRh
Y3RUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCko
KTsKKyAgICB0eXBlZGVmIENvbnRhY3RUaHJlYWRUYXNrMDxUPiBDb250YWN0VGhyZWFkVGFza0lt
cGw7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDb250YWN0VGhyZWFkVGFza0ltcGw+IGNyZWF0
ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ29udGFjdFRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgQ29udGFjdFRocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kKQorICAgICAgICA6IENvbnRhY3RUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAg
ICwgbV9tZXRob2QobWV0aG9kKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSku
Km1fbWV0aG9kKSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUGFzc093blB0cjxDb250YWN0VGhyZWFkOjpUYXNr
PiBjcmVhdGVDb250YWN0VGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9p
ZCAoVDo6Km1ldGhvZCkoKSkKK3sKKyAgICByZXR1cm4gQ29udGFjdFRocmVhZFRhc2swPFQ+Ojpj
cmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29udGFjdFRocmVhZFRhc2tfaApJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250YWN0cy5oIgorCisjaWYgRU5BQkxFKENPTlRB
Q1RTKQorCisjaW5jbHVkZSAiQ29udGFjdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDb250YWN0
RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaW5kQ2FsbGJhY2suaCIKKyNpbmNs
dWRlICJDb250YWN0RmluZE9wdGlvbnMuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRhY3RzOjpDb250
YWN0cyhGcmFtZSogZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCit2b2lkIENv
bnRhY3RzOjpkaXNjb25uZWN0RnJhbWUoKQoreworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUt
PnBhZ2UoKSkKKyAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5jb250YWN0Q29udHJvbGxlcigpLT5j
YW5jZWxQZXJtaXNzaW9uUmVxdWVzdCgpOworICAgIG1fZnJhbWUgPSAwOworfQorCit2b2lkIENv
bnRhY3RzOjpmaW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gZmllbGRzLCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxDb250YWN0RXJyb3JDYWxsYmFjaz5lcnJvckNhbGxi
YWNrLCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAo
bV9mcmFtZSAmJiBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y29u
dGFjdENvbnRyb2xsZXIoKS0+ZmluZChjb250ZXh0LCBmaWVsZHMsIHN1Y2Nlc3NDYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFj
dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RzX2gKKyNkZWZpbmUgQ29u
dGFjdHNfaAorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lOworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7CitjbGFzcyBDb250YWN0RmluZENhbGxiYWNrOworY2xhc3MgQ29udGFjdEVy
cm9yQ2FsbGJhY2s7CitjbGFzcyBDb250YWN0RmluZE9wdGlvbnM7CisKK2NsYXNzIENvbnRhY3Rz
IDogcHVibGljIFJlZkNvdW50ZWQ8Q29udGFjdHM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb250YWN0cz4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ29udGFjdHMoZnJhbWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIFBh
c3NSZWZQdHI8Q29udGFjdEZpbmRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Q29udGFjdEVycm9yQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4pOworCisgICAgRnJhbWUqIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAgIHZvaWQgZGlzY29ubmVjdEZyYW1l
KCk7CisKK3ByaXZhdGU6CisgICAgQ29udGFjdHMoRnJhbWUqKTsKKworICAgIEZyYW1lKiBtX2Zy
YW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENP
TlRBQ1RTKQorCisjZW5kaWYgLy8gQ29udGFjdHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29u
dGFjdHMvQ29udGFjdHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3RzLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RzLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAg
IGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLAorICAgICAgICBPbWl0
Q29uc3RydWN0b3IKKyAgICBdIENvbnRhY3RzIHsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBmaW5k
KGluIERPTVN0cmluZ0xpc3QgZmllbGRzLCBpbiBDb250YWN0RmluZENhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjaywgaW4gQ29udGFjdEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gQ29udGFj
dEZpbmRPcHRpb25zIG9wdGlvbnMpOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuY3BwCShyZXZpc2lvbiA4OTk4NikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNiArNTQsMTAgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoQ09OVEFDVFMpCisjaW5jbHVkZSAiQ29udGFjdFRocmVhZC5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUHJvY2Vzc01lc3NhZ2VzU29vblRhc2sg
OiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CkBAIC0xMjMsNiArMTI3LDEz
IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6On5TY3JpcHRFeGVjdXRpb24KICAgICB9CiAjZW5k
aWYKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBpZiAobV9jb250YWN0VGhyZWFkKSB7Cisg
ICAgICAgIG1fY29udGFjdFRocmVhZC0+c3RvcCgpOworICAgICAgICBtX2NvbnRhY3RUaHJlYWQg
PSAwOworICAgIH0KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgSGFzaFNldDxTdHJp
bmc+OjppdGVyYXRvciBwdWJsaWNCbG9iVVJMc0VuZCA9IG1fcHVibGljQmxvYlVSTHMuZW5kKCk7
CiAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3B1YmxpY0Jsb2JV
UkxzLmJlZ2luKCk7IGl0ZXIgIT0gcHVibGljQmxvYlVSTHNFbmQ7ICsraXRlcikKQEAgLTQxMCw2
ICs0MjEsMTggQEAgRmlsZVRocmVhZCogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmlsZQogfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCitDb250YWN0VGhyZWFkKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0Ojpjb250YWN0VGhyZWFkKCkKK3sKKyAgICBpZiAoIW1fY29udGFjdFRocmVh
ZCkgeworICAgICAgICBtX2NvbnRhY3RUaHJlYWQgPSBDb250YWN0VGhyZWFkOjpjcmVhdGUoKTsK
KyAgICAgICAgaWYgKCFtX2NvbnRhY3RUaHJlYWQtPnN0YXJ0KCkpCisgICAgICAgICAgICBtX2Nv
bnRhY3RUaHJlYWQgPSAwOworICAgIH0KKyAgICByZXR1cm4gbV9jb250YWN0VGhyZWFkLmdldCgp
OworfQorI2VuZGlmCisKIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11
bVRpbWVySW50ZXJ2YWwoZG91YmxlIG9sZE1pbmltdW1UaW1lckludGVydmFsKQogewogICAgIGlm
IChtaW5pbXVtVGltZXJJbnRlcnZhbCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlz
aW9uIDg5OTg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEZpbGVUaHJlYWQ7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAg
ICBjbGFzcyBDb250YWN0VGhyZWFkOworI2VuZGlmCisKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKQEAgLTE1Nyw2ICsxNjEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHN0b3BGaWxlVGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICAg
ICAgQ29udGFjdFRocmVhZCogY29udGFjdFRocmVhZCgpOworI2VuZGlmCisKICAgICAgICAgLy8g
SW50ZXJ2YWwgaXMgaW4gc2Vjb25kcy4KICAgICAgICAgdm9pZCBhZGp1c3RNaW5pbXVtVGltZXJJ
bnRlcnZhbChkb3VibGUgb2xkTWluaW11bVRpbWVySW50ZXJ2YWwpOwogICAgICAgICB2aXJ0dWFs
IGRvdWJsZSBtaW5pbXVtVGltZXJJbnRlcnZhbCgpIGNvbnN0OwpAQCAtMjA4LDYgKzIxNiwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZ
U1RFTSkKICAgICAgICAgUmVmUHRyPEZpbGVUaHJlYWQ+IG1fZmlsZVRocmVhZDsKICNlbmRpZgor
CisjaWYgRU5BQkxFKENPTlRBQ1RTKQorICAgICAgICBSZWZQdHI8Q29udGFjdFRocmVhZD4gbV9j
b250YWN0VGhyZWFkOworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gODk5ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3
LDEwIEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisjaW5jbHVkZSAiQ29udGFjdHMuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIE5hdmlnYXRvcjo6TmF2aWdhdG9yKEZyYW1l
KiBmcmFtZSkKQEAgLTc5LDYgKzgzLDEyIEBAIHZvaWQgTmF2aWdhdG9yOjpkaXNjb25uZWN0RnJh
bWUoKQogICAgICAgICBtX2dlb2xvY2F0aW9uLT5kaXNjb25uZWN0RnJhbWUoKTsKICAgICAgICAg
bV9nZW9sb2NhdGlvbiA9IDA7CiAgICAgfQorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBpZiAo
bV9jb250YWN0cykgeworICAgICAgICBtX2NvbnRhY3RzLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAg
ICAgICAgbV9jb250YWN0cyA9IDA7CisgICAgfQorI2VuZGlmCiAgICAgbV9mcmFtZSA9IDA7CiB9
CiAKQEAgLTE2Nyw2ICsxNzcsMTUgQEAgR2VvbG9jYXRpb24qIE5hdmlnYXRvcjo6Z2VvbG9jYXRp
b24oKSBjbwogICAgIHJldHVybiBtX2dlb2xvY2F0aW9uLmdldCgpOwogfQogCisjaWYgRU5BQkxF
KENPTlRBQ1RTKQorQ29udGFjdHMqIE5hdmlnYXRvcjo6Y29udGFjdHMoKSBjb25zdAoreworICAg
IGlmICghbV9jb250YWN0cykKKyAgICAgICAgbV9jb250YWN0cyA9IENvbnRhY3RzOjpjcmVhdGUo
bV9mcmFtZSk7CisgICAgcmV0dXJuIG1fY29udGFjdHMuZ2V0KCk7Cit9CisjZW5kaWYKKwogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKIHZvaWQgTmF2aWdhdG9yOjpnZXRTdG9yYWdlVXBkYXRlcygp
CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmgJKHJldmlzaW9uIDg5OTg2KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
MTAgQEAgY2xhc3MgTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmln
YXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjazsKIGNsYXNzIFBsdWdpbkRhdGE7CiAKKyNpZiBF
TkFCTEUoQ09OVEFDVFMpCitjbGFzcyBDb250YWN0czsKKyNlbmRpZgorCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCiBjbGFzcyBOYXZpZ2F0b3IgOiBwdWJsaWMgTmF2aWdhdG9yQmFzZSwg
cHVibGljIFJlZkNvdW50ZWQ8TmF2aWdhdG9yPiB7CkBAIC01OCw2ICs2MiwxMCBAQCBwdWJsaWM6
CiAKICAgICBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24oKSBjb25zdDsKIAorI2lmIEVOQUJMRShD
T05UQUNUUykKKyAgICBDb250YWN0cyogY29udGFjdHMoKSBjb25zdDsKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogICAgIC8vIFJlbGlucXVpc2hlcyB0aGUgc3RvcmFnZSBsb2Nr
LCBpZiBvbmUgZXhpc3RzLgogICAgIHZvaWQgZ2V0U3RvcmFnZVVwZGF0ZXMoKTsKQEAgLTc3LDYg
Kzg1LDEwIEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBSZWZQdHI8RE9NUGx1Z2luQXJyYXk+IG1f
cGx1Z2luczsKICAgICBtdXRhYmxlIFJlZlB0cjxET01NaW1lVHlwZUFycmF5PiBtX21pbWVUeXBl
czsKICAgICBtdXRhYmxlIFJlZlB0cjxHZW9sb2NhdGlvbj4gbV9nZW9sb2NhdGlvbjsKKworI2lm
IEVOQUJMRShDT05UQUNUUykKKyAgICBtdXRhYmxlIFJlZlB0cjxDb250YWN0cz4gbV9jb250YWN0
czsKKyNlbmRpZgogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2
aXNpb24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgW0VuYWJsZWRBdFJ1bnRpbWVdIEdlb2xvY2F0aW9uIGdlb2xvY2F0aW9u
OwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEVOQUJMRV9DT05UQUNUUykgJiYgRU5BQkxFX0NPTlRB
Q1RTCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDb250YWN0cyBjb250YWN0czsKKyNlbmRp
ZgorCiAjaWYgZGVmaW5lZChFTkFCTEVfRE9NX1NUT1JBR0UpICYmIEVOQUJMRV9ET01fU1RPUkFH
RQogICAgICAgICB2b2lkIGdldFN0b3JhZ2VVcGRhdGVzKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAkocmV2aXNpb24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUgIkdlb2xvY2F0
aW9uQ29udHJvbGxlci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisjaW5jbHVk
ZSAiQ29udGFjdENvbnRyb2xsZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyBIYXNoU2V0PFBhZ2UqPiogYWxsUGFnZXM7CkBAIC0xMzksNiArMTQzLDkgQEAgUGFn
ZTo6UGFnZShQYWdlQ2xpZW50cyYgcGFnZUNsaWVudHMpCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVD
SCkKICAgICAsIG1fc3BlZWNoSW5wdXRDbGllbnQocGFnZUNsaWVudHMuc3BlZWNoSW5wdXRDbGll
bnQpCiAjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisgICAgLCBtX2NvbnRhY3RDb250cm9s
bGVyKGFkb3B0UHRyKG5ldyBDb250YWN0Q29udHJvbGxlcih0aGlzLCBwYWdlQ2xpZW50cy5jb250
YWN0Q2xpZW50KSkpCisjZW5kaWYKICAgICAsIG1fc2V0dGluZ3MoYWRvcHRQdHIobmV3IFNldHRp
bmdzKHRoaXMpKSkKICAgICAsIG1fcHJvZ3Jlc3MoYWRvcHRQdHIobmV3IFByb2dyZXNzVHJhY2tl
cikpCiAgICAgLCBtX2JhY2tGb3J3YXJkQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQmFja0Zvcndh
cmRDb250cm9sbGVyKHRoaXMsIHBhZ2VDbGllbnRzLmJhY2tGb3J3YXJkQ2xpZW50KSkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNl
bnRlcjsKICNlbmRpZgorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBjbGFzcyBDb250YWN0Q2xp
ZW50OworICAgIGNsYXNzIENvbnRhY3RDb250cm9sbGVyOworI2VuZGlmCiAKICAgICB0eXBlZGVm
IHVpbnQ2NF90IExpbmtIYXNoOwogCkBAIC0xMjAsNiArMTI0LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgUmVmUHRyPEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRDbGll
bnQ7CiAgICAgICAgICAgICBTcGVlY2hJbnB1dENsaWVudCogc3BlZWNoSW5wdXRDbGllbnQ7CiAg
ICAgICAgICAgICBNZWRpYVN0cmVhbUNsaWVudCogbWVkaWFTdHJlYW1DbGllbnQ7CisjaWYgRU5B
QkxFKENPTlRBQ1RTKQorICAgICAgICAgICAgQ29udGFjdENsaWVudCogY29udGFjdENsaWVudDsK
KyNlbmRpZgogICAgICAgICB9OwogCiAgICAgICAgIFBhZ2UoUGFnZUNsaWVudHMmKTsKQEAgLTE5
MSw2ICsxOTgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVD
SCkKICAgICAgICAgU3BlZWNoSW5wdXQqIHNwZWVjaElucHV0KCk7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoQ09OVEFDVFMpCisgICAgICAgIENvbnRhY3RDb250cm9sbGVyKiBjb250YWN0Q29udHJvbGxl
cigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFjdENvbnRyb2xsZXIuZ2V0KCk7IH0KKyNlbmRpZgog
ICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdl
dCgpOyB9CiAgICAgICAgIFByb2dyZXNzVHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVy
biBtX3Byb2dyZXNzLmdldCgpOyB9CiAgICAgICAgIEJhY2tGb3J3YXJkQ29udHJvbGxlciogYmFj
a0ZvcndhcmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tGb3J3YXJkQ29udHJvbGxlci5nZXQoKTsg
fQpAQCAtMzUyLDYgKzM2Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3BlZWNo
SW5wdXRDbGllbnQqIG1fc3BlZWNoSW5wdXRDbGllbnQ7CiAgICAgICAgIE93blB0cjxTcGVlY2hJ
bnB1dD4gbV9zcGVlY2hJbnB1dDsKICNlbmRpZgorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICAg
ICAgT3duUHRyPENvbnRhY3RDb250cm9sbGVyPiBtX2NvbnRhY3RDb250cm9sbGVyOworI2VuZGlm
CiAgICAgICAgIE93blB0cjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICAgICAgT3duUHRyPFBy
b2dyZXNzVHJhY2tlcj4gbV9wcm9ncmVzczsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250YWN0Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ29udGFjdENsaWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ29udGFjdENsaWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRl
ZiBDb250YWN0Q2xpZW50X2gKKyNkZWZpbmUgQ29udGFjdENsaWVudF9oCisKKyNpZiBFTkFCTEUo
Q09OVEFDVFMpCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7Citj
bGFzcyBDb250YWN0RmluZE9wdGlvbnM7CisKK2NsYXNzIENvbnRhY3RDbGllbnQgeworcHVibGlj
OgorICAgIHZpcnR1YWwgfkNvbnRhY3RDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBm
aW5kKERPTVN0cmluZ0xpc3QqLCBDb250YWN0RmluZE9wdGlvbnMqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNhbmNlbCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lv
bigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKSA9IDA7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250
YWN0Q2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQ29udGFjdENs
aWVudE1vY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
Q29udGFjdENsaWVudE1vY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Db250YWN0Q2xpZW50TW9jay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRhY3RDbGllbnRNb2NrLmgiCisK
KyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJDb250YWN0QXJyYXkuaCIKKyNpbmNs
dWRlICJDb250YWN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNvbnRhY3RFcnJvci5oIgorI2lu
Y2x1ZGUgIkNvbnRhY3RGaW5kT3B0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Nv
bnRhY3RDbGllbnRNb2NrOjpDb250YWN0Q2xpZW50TW9jaygpCisgICAgOiBtX2NvbnRyb2xsZXIo
MCkKKyAgICAsIG1fcGVybWlzc2lvblN0YXRlKFBlcm1pc3Npb25TdGF0ZVVuc2V0KQoreworfQor
CitDb250YWN0Q2xpZW50TW9jazo6fkNvbnRhY3RDbGllbnRNb2NrKCkKK3sKK30KKwordm9pZCBD
b250YWN0Q2xpZW50TW9jazo6dXBkYXRlUGVybWlzc2lvbigpCit7CisgICAgQVNTRVJUKG1fcGVy
bWlzc2lvblN0YXRlICE9IFBlcm1pc3Npb25TdGF0ZVVuc2V0KTsKKyAgICBib29sIGFsbG93ZWQg
PSBtX3Blcm1pc3Npb25TdGF0ZSA9PSBQZXJtaXNzaW9uU3RhdGVBbGxvd2VkOworICAgIG1fY29u
dHJvbGxlci0+c2V0QWxsb3dlZChhbGxvd2VkKTsKK30KKwordm9pZCBDb250YWN0Q2xpZW50TW9j
azo6dXBkYXRlQ29udHJvbGxlcigpCit7CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7CisKKyAg
ICBpZiAobV9jb250YWN0cykKKyAgICAgICAgbV9jb250cm9sbGVyLT5jb250YWN0RmluZGVkKG1f
Y29udGFjdHMuZ2V0KCkpOworICAgIGVsc2UgaWYgKG1fZXJyb3IpCisgICAgICAgIG1fY29udHJv
bGxlci0+ZXJyb3JPY2N1cnJlZChtX2Vycm9yLmdldCgpKTsKK30KKwordm9pZCBDb250YWN0Q2xp
ZW50TW9jazo6c2V0Q29udHJvbGxlcihDb250YWN0Q29udHJvbGxlciAqY29udHJvbGxlcikKK3sK
KyAgICBBU1NFUlQoY29udHJvbGxlciAmJiAhbV9jb250cm9sbGVyKTsKKyAgICBtX2NvbnRyb2xs
ZXIgPSBjb250cm9sbGVyOworfQorCit2b2lkIENvbnRhY3RDbGllbnRNb2NrOjpzZXRDb250YWN0
cyhQYXNzUmVmUHRyPENvbnRhY3RBcnJheT4gY29udGFjdHMpCit7CisgICAgbV9jb250YWN0cyA9
IGNvbnRhY3RzOworICAgIG1fZXJyb3IgPSAwOworICAgIHVwZGF0ZUNvbnRyb2xsZXIoKTsKK30K
Kwordm9pZCBDb250YWN0Q2xpZW50TW9jazo6c2V0RXJyb3IoUGFzc1JlZlB0cjxDb250YWN0RXJy
b3I+IGVycm9yKQoreworICAgIG1fZXJyb3IgPSBlcnJvcjsKKyAgICBtX2NvbnRhY3RzID0gMDsK
KyAgICB1cGRhdGVDb250cm9sbGVyKCk7Cit9CisKK3ZvaWQgQ29udGFjdENsaWVudE1vY2s6OnNl
dFBlcm1pc3Npb24oYm9vbCBhbGxvd2VkKQoreworICAgIG1fcGVybWlzc2lvblN0YXRlID0gYWxs
b3dlZCA/IFBlcm1pc3Npb25TdGF0ZUFsbG93ZWQgOiBQZXJtaXNzaW9uU3RhdGVEZW5pZWQ7Cisg
ICAgdXBkYXRlUGVybWlzc2lvbigpOworfQorCit2b2lkIENvbnRhY3RDbGllbnRNb2NrOjpyZXF1
ZXN0UGVybWlzc2lvbigpCit7CisgICAgaWYgKG1fcGVybWlzc2lvblN0YXRlICE9IFBlcm1pc3Np
b25TdGF0ZVVuc2V0KQorICAgICAgICB1cGRhdGVQZXJtaXNzaW9uKCk7Cit9CisKK3ZvaWQgQ29u
dGFjdENsaWVudE1vY2s6OmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KCkKK3sKK30KKwordm9pZCBD
b250YWN0Q2xpZW50TW9jazo6cmVzZXQoKQoreworICAgIG1fY29udGFjdHMgPSAwOworICAgIG1f
ZXJyb3IgPSAwOworICAgIG1fcGVybWlzc2lvblN0YXRlID0gUGVybWlzc2lvblN0YXRlVW5zZXQ7
Cit9CisKK3ZvaWQgQ29udGFjdENsaWVudE1vY2s6OmZpbmQoRE9NU3RyaW5nTGlzdCosIENvbnRh
Y3RGaW5kT3B0aW9ucyopCit7CisgICAgdXBkYXRlQ29udHJvbGxlcigpOworfQorCit2b2lkIENv
bnRhY3RDbGllbnRNb2NrOjpjYW5jZWwoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svQ29udGFjdENsaWVudE1vY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL0NvbnRhY3RDbGllbnRNb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0NvbnRhY3RDbGllbnRNb2NrLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RDbGllbnRNb2NrX2gKKyNkZWZpbmUgQ29udGFj
dENsaWVudE1vY2tfaAorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29udGFj
dENsaWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ29udGFjdEFycmF5OworY2xhc3MgQ29udGFjdEVycm9yOworY2xhc3MgQ29u
dGFjdEZpbmRPcHRpb25zOworY2xhc3MgQ29udGFjdENvbnRyb2xsZXI7CisKK2NsYXNzIENvbnRh
Y3RDbGllbnRNb2NrIDogcHVibGljIENvbnRhY3RDbGllbnQgeworcHVibGljOgorICAgIENvbnRh
Y3RDbGllbnRNb2NrKCk7CisgICAgdmlydHVhbCB+Q29udGFjdENsaWVudE1vY2soKTsKKworICAg
IHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIHNldENvbnRyb2xsZXIoQ29udGFjdENvbnRyb2xsZXIq
KTsKKworICAgIHZvaWQgc2V0UGVybWlzc2lvbihib29sIGFsbG93ZWQpOworICAgIHZvaWQgc2V0
RXJyb3IoUGFzc1JlZlB0cjxDb250YWN0RXJyb3I+KTsKKyAgICB2b2lkIHNldENvbnRhY3RzKFBh
c3NSZWZQdHI8Q29udGFjdEFycmF5Pik7CisKKyAgICAvLyBDb250YWN0Q2xpZW50CisgICAgdmly
dHVhbCB2b2lkIGZpbmQoRE9NU3RyaW5nTGlzdCosIENvbnRhY3RGaW5kT3B0aW9ucyopOworICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Np
b24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZVBlcm1pc3Npb24oKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRy
b2xsZXIoKTsKKworICAgIFJlZlB0cjxDb250YWN0QXJyYXk+IG1fY29udGFjdHM7CisgICAgUmVm
UHRyPENvbnRhY3RFcnJvcj4gbV9lcnJvcjsKKyAgICBDb250YWN0Q29udHJvbGxlciogbV9jb250
cm9sbGVyOworCisgICAgZW51bSBQZXJtaXNzaW9uU3RhdGUgeworICAgICAgICBQZXJtaXNzaW9u
U3RhdGVVbnNldCwKKyAgICAgICAgUGVybWlzc2lvblN0YXRlQWxsb3dlZCwKKyAgICAgICAgUGVy
bWlzc2lvblN0YXRlRGVuaWVkLAorICAgIH0gbV9wZXJtaXNzaW9uU3RhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8JKHJldmlzaW9uIDg5OTg2KQorKysgU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksMTMgQEAg
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0dFT0xPQ0FUSU9OPTEpIAogICAgICAgICAkJFBXRC9X
ZWJDb3JlU3VwcG9ydC9HZW9sb2NhdGlvbkNsaWVudFF0LmNwcAogfQogCitjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfQ09OVEFDVFM9MSkgeworICAgICBIRUFERVJTICs9IFwKKyAgICAgICAgJCRT
T1VSQ0VfRElSL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Db250YWN0Q2xpZW50TW9jay5oCisgICAg
IFNPVVJDRVMgKz0gXAorICAgICAgICAkJFNPVVJDRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L0NvbnRhY3RDbGllbnRNb2NrLmNwcAorfQorCiBjb250YWlucyhDT05GSUcsIHRleG1hcCkgewog
ICAgIERFRklORVMgKz0gV1RGX1VTRV9URVhUVVJFX01BUFBFUj0xCiB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA4OTk4NikKKysrIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMCBAQAogI2lu
Y2x1ZGUgInJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgInd0Zi9UaHJl
YWRpbmcuaCIKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyNpbmNsdWRlICJDb250YWN0Q2xpZW50
TW9jay5oIgorI2VuZGlmIAorCiAjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgogI2luY2x1ZGUgPFFC
YXNpY1RpbWVyPgogI2luY2x1ZGUgPFFCaXRBcnJheT4KQEAgLTM0Niw2ICszNTAsOSBAQCBRV2Vi
UGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZShRV2ViUGFnCiAgICAgZWxzZQogICAgICAgICBw
YWdlQ2xpZW50cy5nZW9sb2NhdGlvbkNsaWVudCA9IG5ldyBHZW9sb2NhdGlvbkNsaWVudFF0KHEp
OwogI2VuZGlmCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorICAgIHBhZ2VDbGllbnRzLmNvbnRhY3RD
bGllbnQgPSBuZXcgQ29udGFjdENsaWVudE1vY2soKTsKKyNlbmRpZgogICAgIHBhZ2UgPSBuZXcg
UGFnZShwYWdlQ2xpZW50cyk7CiAKICAgICAvLyBCeSBkZWZhdWx0IGVhY2ggcGFnZSBpcyBwdXQg
aW50byB0aGVpciBvd24gdW5pcXVlIHBhZ2UgZ3JvdXAsIHdoaWNoIGFmZmVjdHMgcG9wdXAgd2lu
ZG93cwpAQCAtMzcwLDYgKzM3NywxMCBAQCBRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0
ZShRV2ViUGFnCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpICAgIAogICAgIE5vdGlmaWNhdGlv
blByZXNlbnRlckNsaWVudFF0Ojpub3RpZmljYXRpb25QcmVzZW50ZXIoKS0+YWRkQ2xpZW50KCk7
CiAjZW5kaWYKKworI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBzdGF0aWNfY2FzdDxDb250YWN0
Q2xpZW50TW9jayo+KHBhZ2VDbGllbnRzLmNvbnRhY3RDbGllbnQpLT5zZXRDb250cm9sbGVyKHBh
Z2UtPmNvbnRhY3RDb250cm9sbGVyKCkpOworI2VuZGlmCiB9CiAKIFFXZWJQYWdlUHJpdmF0ZTo6
flFXZWJQYWdlUHJpdmF0ZSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAkocmV2aXNpb24g
ODk5ODYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsMTUgQEAKICNpbmNsdWRl
ICJNZWRpYVBsYXllclByaXZhdGVRdC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMp
CisjaW5jbHVkZSAiQ29udGFjdENsaWVudC5oIgorI2luY2x1ZGUgIkNvbnRhY3RDbGllbnRNb2Nr
LmgiCisjaW5jbHVkZSAiQ29udGFjdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDb250YWN0RXJy
b3IuaCIKKyNpbmNsdWRlICJDb250YWN0LmgiCisjaW5jbHVkZSAiQ29udGFjdEFycmF5LmgiCisj
ZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFFNYXA8aW50LCBRV2ViU2NyaXB0
V29ybGQqPiBtX3dvcmxkTWFwOwpAQCAtMTA2LDYgKzExNSwxNCBAQCBHZW9sb2NhdGlvbkNsaWVu
dE1vY2sqIHRvR2VvbG9jYXRpb25DbGllCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDT05UQUNU
UykKK0NvbnRhY3RDbGllbnRNb2NrKiB0b0NvbnRhY3RDbGllbnRNb2NrKENvbnRhY3RDbGllbnQq
IGNsaWVudCkKK3sKKyAgICAgQVNTRVJUKFFXZWJQYWdlUHJpdmF0ZTo6ZHJ0UnVuKTsKKyAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvbnRhY3RDbGllbnRNb2NrKj4oY2xpZW50KTsKK30KKyNlbmRp
ZgorCiBRRFJUTm9kZTo6UURSVE5vZGUoKQogICAgIDogbV9ub2RlKDApCiB7CkBAIC04NjIsNiAr
ODc5LDYwIEBAIGludCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6bnVtYmVyT2ZQZW4KICNlbmRp
ZgogfQogCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrQ29udGFjdFBlcm1p
c3Npb24oUVdlYlBhZ2UqIHBhZ2UsIGJvb2wgYWxsb3dlZCkKK3sKKyNpZiBFTkFCTEUoQ09OVEFD
VFMpCisgICAgUGFnZSogY29yZVBhZ2UgPSBRV2ViUGFnZVByaXZhdGU6OmNvcmUocGFnZSk7Cisg
ICAgQ29udGFjdENsaWVudE1vY2sqIG1vY2tDbGllbnQgPSB0b0NvbnRhY3RDbGllbnRNb2NrKGNv
cmVQYWdlLT5jb250YWN0Q29udHJvbGxlcigpLT5jbGllbnQoKSk7CisgICAgbW9ja0NsaWVudC0+
c2V0UGVybWlzc2lvbihhbGxvd2VkKTsKKyNlbmRpZgorfQorCit2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpzZXRNb2NrQ29udGFjdEVycm9yKFFXZWJQYWdlKiBwYWdlLCBpbnQgZXJyb3JD
b2RlKQoreworI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBQYWdlKiBjb3JlUGFnZSA9IFFXZWJQ
YWdlUHJpdmF0ZTo6Y29yZShwYWdlKTsKKworICAgIENvbnRhY3RFcnJvcjo6RXJyb3JDb2RlIGNv
ZGUgPSBDb250YWN0RXJyb3I6OlVOS05PV05fRVJST1I7CisgICAgc3dpdGNoKGVycm9yQ29kZSkg
eworICAgIGNhc2UgQ29udGFjdEVycm9yOjpJTlZBTElEX0FSR1VNRU5UX0VSUk9SOgorICAgICAg
ICBjb2RlID0gQ29udGFjdEVycm9yOjpJTlZBTElEX0FSR1VNRU5UX0VSUk9SOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbnRhY3RFcnJvcjo6VElNRU9VVF9FUlJPUjoKKyAgICAgICAgY29k
ZSA9IENvbnRhY3RFcnJvcjo6VElNRU9VVF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb250YWN0RXJyb3I6OlBFTkRJTkdfT1BFUkFUSU9OX0VSUk9SOgorICAgICAgICBjb2RlID0g
Q29udGFjdEVycm9yOjpQRU5ESU5HX09QRVJBVElPTl9FUlJPUjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb250YWN0RXJyb3I6OklPX0VSUk9SOgorICAgICAgICBjb2RlID0gQ29udGFjdEVy
cm9yOjpJT19FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb250YWN0RXJyb3I6Ok5P
VF9TVVBQT1JURURfRVJST1I6CisgICAgICAgIGNvZGUgPSBDb250YWN0RXJyb3I6Ok5PVF9TVVBQ
T1JURURfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29udGFjdEVycm9yOjpQRVJN
SVNTSU9OX0RFTklFRF9FUlJPUjoKKyAgICAgICAgY29kZSA9IENvbnRhY3RFcnJvcjo6UEVSTUlT
U0lPTl9ERU5JRURfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIENvbnRhY3RD
bGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gc3RhdGljX2Nhc3Q8Q29udGFjdENsaWVudE1vY2sqPihj
b3JlUGFnZS0+Y29udGFjdENvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworICAgIG1vY2tDbGllbnQt
PnNldEVycm9yKENvbnRhY3RFcnJvcjo6Y3JlYXRlKGNvZGUpKTsKKyNlbmRpZgorfQorCit2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRNb2NrQ29udGFjdChRV2ViUGFnZSogcGFnZSwg
Y29uc3QgUVN0cmluZyYgaWQsIGNvbnN0IFFTdHJpbmcmIGRpc3BsYXlOYW1lLCBjb25zdCBRU3Ry
aW5nJiBwaG9uZU51bWJlciwgY29uc3QgUVN0cmluZyYgZW1haWwsIGNvbnN0IFFTdHJpbmcmIGFk
ZHJlc3MsIGNvbnN0IFFTdHJpbmcmIGltLCBjb25zdCBRU3RyaW5nJiBvcmdhbml6YXRpb24sIGNv
bnN0IFFTdHJpbmcmIGNhdGVnb3J5LCBjb25zdCBRU3RyaW5nJiB1cmwpCit7CisjaWYgRU5BQkxF
KENPTlRBQ1RTKQorICAgIFBhZ2UqIGNvcmVQYWdlID0gUVdlYlBhZ2VQcml2YXRlOjpjb3JlKHBh
Z2UpOworICAgIENvbnRhY3RDbGllbnRNb2NrKiBtb2NrQ2xpZW50ID0gdG9Db250YWN0Q2xpZW50
TW9jayhjb3JlUGFnZS0+Y29udGFjdENvbnRyb2xsZXIoKS0+Y2xpZW50KCkpOworICAgIFJlZlB0
cjxDb250YWN0QXJyYXk+IGNvbnRhY3RzID0gQ29udGFjdEFycmF5OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8Q29udGFjdD4gY29udGFjdCA9IENvbnRhY3Q6OmNyZWF0ZShpZCk7CisgICAgY29udGFj
dC0+c2V0RGlzcGxheU5hbWUoZGlzcGxheU5hbWUpOworICAgIGNvbnRhY3RzLT5hcHBlbmQoY29u
dGFjdC5yZWxlYXNlKCkpOworICAgIG1vY2tDbGllbnQtPnNldENvbnRhY3RzKGNvbnRhY3RzLnJl
bGVhc2UoKSk7CisjZW5kaWYKK30KKwogYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6aXNU
YXJnZXRJdGVtKGNvbnN0IFFXZWJIaXN0b3J5SXRlbSYgaGlzdG9yeUl0ZW0pCiB7CiAgICAgUVdl
Ykhpc3RvcnlJdGVtIGl0ID0gaGlzdG9yeUl0ZW07CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5oCShy
ZXZpc2lvbiA4OTk4NikKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSwxMCBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IoUVdlYlBhZ2Uq
LCBpbnQgZXJyb3JDb2RlLCBjb25zdCBRU3RyaW5nJiBtZXNzYWdlKTsKICAgICBzdGF0aWMgaW50
IG51bWJlck9mUGVuZGluZ0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKFFXZWJQYWdlKik7
CiAKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrQ29udGFjdFBlcm1pc3Npb24oUVdlYlBhZ2UqLCBi
b29sIGFsbG93KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNb2NrQ29udGFjdEVycm9yKFFXZWJQYWdl
KiwgaW50IGNvZGUpOworICAgIHN0YXRpYyB2b2lkIHNldE1vY2tDb250YWN0KFFXZWJQYWdlKiwg
Y29uc3QgUVN0cmluZyYgaWQsIGNvbnN0IFFTdHJpbmcmIGRpc3BsYXlOYW1lLCBjb25zdCBRU3Ry
aW5nJiBwaG9uZU51bWJlciwgY29uc3QgUVN0cmluZyYgZW1haWwsIGNvbnN0IFFTdHJpbmcmIGFk
ZHJlc3MsIGNvbnN0IFFTdHJpbmcmIGltLCBjb25zdCBRU3RyaW5nJiBvcmdhbml6YXRpb24sIGNv
bnN0IFFTdHJpbmcmIGNhdGVnb3J5LCBjb25zdCBRU3RyaW5nJiB1cmwpOworCiAgICAgc3RhdGlj
IGludCB3b3JrZXJUaHJlYWRDb3VudCgpOwogCiAgICAgc3RhdGljIFFTdHJpbmcgbWFya2VyVGV4
dEZvckxpc3RJdGVtKGNvbnN0IFFXZWJFbGVtZW50JiBsaXN0SXRlbSk7CkluZGV4OiBUb29scy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MDA4NikK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEx
LTA2LTI5ICBEb25nZ3dhbiAgPGRvbmdnd2FuLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQ29udGFjdHMgQVBJIGZl
YXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYz
MjIzCisKKyAgICAgICAgSW1wbGVtZW50IHRlc3RpbmcgZm9yIG1vY2stdXAgYmFzZWQgQ29udGFj
dHMgQVBJCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHA6CisgICAgICAgIChzZXRNb2NrQ29udGFjdFBlcm1pc3Npb25DYWxsYmFjayk6CisgICAgICAg
IChzZXRNb2NrQ29udGFjdEVycm9yQ2FsbGJhY2spOgorICAgICAgICAoc2V0TW9ja0NvbnRhY3RD
YWxsYmFjayk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25z
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorCiAy
MDExLTA2LTI5ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA4OTk4NikKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIw
MSw2ICsyMjAxLDk2IEBAIHN0YXRpYyB2b2lkIGxheW91dFRlc3RDb250cm9sbGVyT2JqZWN0RmkK
ICAgICBjb250cm9sbGVyLT5kZXJlZigpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNb2Nr
Q29udGFjdFBlcm1pc3Npb25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRNb2NrQ29udGFjdFBlcm1pc3Npb24o
SlNWYWx1ZVRvQm9vbGVhbihjb250ZXh0LCBhcmd1bWVudHNbMF0pKTsKKworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0
TW9ja0NvbnRhY3RFcnJvckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKKworICAgIGludCBjb2RlID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgTlVMTCk7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVj
dEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPnNldE1vY2tDb250YWN0
RXJyb3IoY29kZSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNldE1vY2tDb250YWN0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IGlkKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBkaXNwbGF5TmFtZShBZG9wdCwgSlNWYWx1ZVRvU3Ry
aW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCgh
KmV4Y2VwdGlvbik7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gcGhvbmVOdW1iZXI7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMykgeworICAgICAgICB0YXJnZXQuYWRvcHQoSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOworICAg
ICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIH0gZWxzZQorICAgICAgICB0YXJnZXQuYWRv
cHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBlbWFpbDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSA0KSB7CisgICAg
ICAgIHRhcmdldC5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1sz
XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBlbHNl
CisgICAgICAgIHRhcmdldC5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikp
OworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFkZHJlc3M7CisgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPj0gNSkgeworICAgICAgICB0YXJnZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29w
eShjb250ZXh0LCBhcmd1bWVudHNbNF0sIGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpl
eGNlcHRpb24pOworICAgIH0gZWxzZQorICAgICAgICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBp
bTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSA2KSB7CisgICAgICAgIHRhcmdldC5hZG9wdChK
U1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1s1XSwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIHRhcmdldC5h
ZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IG9yZ2FuaXphdGlvbjsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSA3
KSB7CisgICAgICAgIHRhcmdldC5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1s2XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7Cisg
ICAgfSBlbHNlCisgICAgICAgIHRhcmdldC5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiIikpOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGNhdGVnb3J5OworICAg
IGlmIChhcmd1bWVudENvdW50ID49IDgpIHsKKyAgICAgICAgdGFyZ2V0LmFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzddLCBleGNlcHRpb24pKTsKKyAgICAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGFyZ2V0LmFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gdXJsOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDkpIHsKKyAgICAgICAgdGFy
Z2V0LmFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzhdLCBleGNl
cHRpb24pKTsKKyAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgdGFyZ2V0LmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisKKyAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250
cm9sbGVyLT5zZXRNb2NrQ29udGFjdChpZC5nZXQoKSwgZGlzcGxheU5hbWUuZ2V0KCksIHBob25l
TnVtYmVyLmdldCgpLCBlbWFpbC5nZXQoKSwgYWRkcmVzcy5nZXQoKSwgaW0uZ2V0KCksIG9yZ2Fu
aXphdGlvbi5nZXQoKSwgY2F0ZWdvcnkuZ2V0KCksIHVybC5nZXQoKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIC8vIE9iamVjdCBDcmVhdGlvbgog
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKQEAgLTI0MDUsNiArMjQ5NSw5IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250
cm9sbGVyOjoKICAgICAgICAgeyAic2V0U2hvdWxkUGFpbnRCcm9rZW5JbWFnZSIsIHNldFNob3Vs
ZFBhaW50QnJva2VuSW1hZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRUZXh0RGly
ZWN0aW9uIiwgc2V0VGV4dERpcmVjdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImFs
bG93Um91bmRpbmdIYWNrcyIsIGFsbG93Um91bmRpbmdIYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgInNldE1vY2tDb250YWN0UGVybWlzc2lvbiIsIHNldE1vY2tDb250YWN0UGVybWlz
c2lvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInNldE1vY2tDb250YWN0RXJyb3IiLCBz
ZXRNb2NrQ29udGFjdEVycm9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2V0TW9ja0Nv
bnRhY3QiLCBzZXRNb2NrQ29udGFjdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgMCwgMCwg
MCB9CiAgICAgfTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5oCShyZXZpc2lvbiA4OTk4NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Niw2ICszNDYsMTAgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRUZXh0RGlyZWN0aW9uKEpTU3RyaW5nUmVmKTsKIAorICAgIHZv
aWQgc2V0TW9ja0NvbnRhY3RQZXJtaXNzaW9uKGJvb2wgYWxsb3cpOworICAgIHZvaWQgc2V0TW9j
a0NvbnRhY3RFcnJvcihpbnQgY29kZSk7CisgICAgdm9pZCBzZXRNb2NrQ29udGFjdChKU1N0cmlu
Z1JlZiBpZCwgSlNTdHJpbmdSZWYgZGlzcGxheU5hbWUsIEpTU3RyaW5nUmVmIHBob25lTnVtYmVy
LCBKU1N0cmluZ1JlZiBlbWFpbCwgSlNTdHJpbmdSZWYgYWRkcmVzcywgSlNTdHJpbmdSZWYgaW0s
IEpTU3RyaW5nUmVmIG9yZ2FuaXphdGlvbiwgSlNTdHJpbmdSZWYgY2F0ZWdvcnksIEpTU3RyaW5n
UmVmIHVybCk7CisKIHByaXZhdGU6CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIoY29uc3Qgc3Rk
OjpzdHJpbmcmIHRlc3RQYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBleHBlY3RlZFBpeGVs
SGFzaCk7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiA4OTk4NikKKysrIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTUs
NiArODU1LDI3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2gKICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1Lgog
fQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrQ29udGFjdFBlcm1pc3Npb24o
Ym9vbCBhbGxvdykKK3sKKyAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2Ry
dC0+Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBw
YWdlcykKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tDb250YWN0UGVy
bWlzc2lvbihwYWdlLCBhbGxvdyk7Cit9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dE1vY2tDb250YWN0RXJyb3IoaW50IGNvZGUpCit7CisgICAgUUxpc3Q8V2ViQ29yZTo6V2ViUGFn
ZSo+IHBhZ2VzID0gbV9kcnQtPmdldEFsbFBhZ2VzKCk7CisgICAgZm9yZWFjaCAoV2ViQ29yZTo6
V2ViUGFnZSogcGFnZSwgcGFnZXMpCisgICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0Ojpz
ZXRNb2NrQ29udGFjdEVycm9yKHBhZ2UsIGNvZGUpOworfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRNb2NrQ29udGFjdChjb25zdCBRU3RyaW5nJiBpZCwgY29uc3QgUVN0cmluZyYg
ZGlzcGxheU5hbWUsIGNvbnN0IFFTdHJpbmcmIHBob25lTnVtYmVyLCBjb25zdCBRU3RyaW5nJiBl
bWFpbCwgY29uc3QgUVN0cmluZyYgYWRkcmVzcywgY29uc3QgUVN0cmluZyYgaW0sIGNvbnN0IFFT
dHJpbmcmIG9yZ2FuaXphdGlvbiwgY29uc3QgUVN0cmluZyYgY2F0ZWdvcnksIGNvbnN0IFFTdHJp
bmcmIHVybCkKK3sKKyAgICBRTGlzdDxXZWJDb3JlOjpXZWJQYWdlKj4gcGFnZXMgPSBtX2RydC0+
Z2V0QWxsUGFnZXMoKTsKKyAgICBmb3JlYWNoIChXZWJDb3JlOjpXZWJQYWdlKiBwYWdlLCBwYWdl
cykKKyAgICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldE1vY2tDb250YWN0KHBhZ2Us
IGlkLCBkaXNwbGF5TmFtZSwgcGhvbmVOdW1iZXIsIGVtYWlsLCBhZGRyZXNzLCBpbSwgb3JnYW5p
emF0aW9uLCBjYXRlZ29yeSwgdXJsKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcm
IHNjcmlwdCkKIHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNj
cmlwdCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5oCShyZXZpc2lvbiA4OTk4NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw5
IEBAIHB1YmxpYyBzbG90czoKICAgICBRU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpOwogICAgIHZv
aWQgc2V0VGV4dERpcmVjdGlvbihjb25zdCBRU3RyaW5nJiBkaXJlY3Rpb25OYW1lKTsKIAorICAg
IHZvaWQgc2V0TW9ja0NvbnRhY3RQZXJtaXNzaW9uKGJvb2wgYWxsb3cpOworICAgIHZvaWQgc2V0
TW9ja0NvbnRhY3RFcnJvcihpbnQgY29kZSk7CisgICAgdm9pZCBzZXRNb2NrQ29udGFjdChjb25z
dCBRU3RyaW5nJiBpZCwgY29uc3QgUVN0cmluZyYgZGlzcGxheU5hbWUsIGNvbnN0IFFTdHJpbmcm
IHBob25lTnVtYmVyID0gUVN0cmluZygpLCBjb25zdCBRU3RyaW5nJiBlbWFpbCA9IFFTdHJpbmco
KSwgY29uc3QgUVN0cmluZyYgYWRkcmVzcyA9IFFTdHJpbmcoKSwgY29uc3QgUVN0cmluZyYgaW0g
PSBRU3RyaW5nKCksIGNvbnN0IFFTdHJpbmcmIG9yZ2FuaXphdGlvbiA9IFFTdHJpbmcoKSwgY29u
c3QgUVN0cmluZyYgY2F0ZWdvcnkgPSBRU3RyaW5nKCksIGNvbnN0IFFTdHJpbmcmIHVybCA9IFFT
dHJpbmcoKSk7CiBwcml2YXRlIHNsb3RzOgogICAgIHZvaWQgcHJvY2Vzc1dvcmsoKTsKIApJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTAwODYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wNi0yOSAgRG9uZ2d3YW4gIDxkb25nZ3dhbi5r
aW1Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIENvbnRhY3RzIEFQSSBmZWF0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzIyMworCisgICAgICAgIEltcGxlbWVudCB0ZXN0
aW5nIGZvciBtb2NrLXVwIGJhc2VkIENvbnRhY3RzIEFQSQorCisgICAgICAgICogZmFzdC9kb20v
Q29udGFjdHM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Db250YWN0cy9lbmFibGVkLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0NvbnRhY3RzL2Vycm9yLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vQ29udGFjdHMvZXJyb3IuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9kb20vQ29udGFjdHMvcGVybWlzc2lvbi1kZW5pZWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Db250YWN0cy9wZXJtaXNzaW9uLWRlbmll
ZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Db250YWN0cy9yZXNvdXJjZXM6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0czogQWRkZWQuCisg
ICAgICAgICogZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9lbmFibGVkLmpz
OiBBZGRlZC4KKyAgICAgICAgKGhhc0NvbnRhY3RzUHJvcGVydHkpOgorICAgICAgICAqIGZhc3Qv
ZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9lcnJvci5qczogQWRkZWQuCisgICAgICAgICogZmFz
dC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL3Blcm1pc3Npb24tZGVuaWVkLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9Db250YWN0cy9zY3JpcHQtdGVzdHMvc3VjY2Vzcy5qczogQWRk
ZWQuCisgICAgICAgICgpOgorICAgICAgICAqIGZhc3QvZG9tL0NvbnRhY3RzL3N1Y2Nlc3MtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9Db250YWN0cy9zdWNjZXNzLmh0
bWw6IEFkZGVkLgorCiAyMDExLTA2LTI5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgdGVzdCBkZXNjcmlwdGlvbi4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvZW5hYmxlZC1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3RzIHRoYXQgdGhlIG5h
dmlnYXRvci5jb250YWN0cyBvYmplY3QgaXMgcHJlc2VudC4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgdHlwZW9mIG5hdmlnYXRvci5jb250YWN0cyA9PSAnb2JqZWN0JyBp
cyB0cnVlCitQQVNTIGhhc0NvbnRhY3RzUHJvcGVydHkoKSBpcyB0cnVlCitQQVNTICdjb250YWN0
cycgaW4gbmF2aWdhdG9yIGlzIHRydWUKK1BBU1MgbmF2aWdhdG9yLmhhc093blByb3BlcnR5KCdj
b250YWN0cycpIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9lbmFibGVk
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvZW5hYmxl
ZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvZW5h
YmxlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2VuYWJsZWQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20v
Q29udGFjdHMvZXJyb3ItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0NvbnRhY3RzL2Vycm9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2Vycm9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNyBAQAorVGVzdHMgQ29udGFjdHMgZXJyb3IgY2FsbGJhY2sgdXNpbmcgdGhl
IG1vY2sgc2VydmljZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXJy
b3IuY29kZSBpcyBtb2NrQ29kZQorUEFTUyBlcnJvci5VTktOT1dOX0VSUk9SIGlzIDAKK1BBU1Mg
ZXJyb3IuSU5WQUxJRF9BUkdVTUVOVF9FUlJPUiBpcyAxCitQQVNTIGVycm9yLlRJTUVPVVRfRVJS
T1IgaXMgMgorUEFTUyBlcnJvci5QRU5ESU5HX09QRVJBVElPTl9FUlJPUiBpcyAzCitQQVNTIGVy
cm9yLklPX0VSUk9SIGlzIDQKK1BBU1MgZXJyb3IuTk9UX1NVUFBPUlRFRF9FUlJPUiBpcyA1CitQ
QVNTIGVycm9yLlBFUk1JU1NJT05fREVOSUVEX0VSUk9SIGlzIDIwCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vQ29udGFjdHMvZXJyb3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9Db250YWN0cy9lcnJvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vQ29udGFjdHMvZXJyb3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9lcnJvci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9Db250YWN0cy9wZXJtaXNzaW9uLWRlbmllZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvcGVybWlzc2lvbi1kZW5p
ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29u
dGFjdHMvcGVybWlzc2lvbi1kZW5pZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwIEBACitUZXN0cyBDb250YWN0cyB3aGVuIHBlcm1pc3Npb24gaXMgZGVuaWVkLCB1c2lu
ZyB0aGUgbW9jayBzZXJ2aWNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBlcnJvci5jb2RlIGlzIGVycm9yLlBFUk1JU1NJT05fREVOSUVEX0VSUk9SCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vQ29udGFjdHMvcGVybWlzc2lvbi1kZW5pZWQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9wZXJtaXNzaW9uLWRlbmllZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvcGVybWlzc2lvbi1k
ZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wZXJtaXNzaW9uLWRl
bmllZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9Db250YWN0cy9zdWNjZXNzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zdWNjZXNzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3N1Y2Nlc3MtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0cyBDb250YWN0cyBzdWNjZXNz
IGNhbGxiYWNrIHVzaW5nIHRoZSBtb2NrIHNlcnZpY2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGNvbnRhY3QuaWQgaXMgbW9ja0lkCitQQVNTIGNvbnRhY3QuZGlzcGxh
eU5hbWUgaXMgbW9ja0Rpc3BsYXlOYW1lCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMv
c3VjY2Vzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3Rz
L3N1Y2Nlc3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRh
Y3RzL3N1Y2Nlc3MuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zdWNjZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRl
c3RzL1RFTVBMQVRFLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJZT1VSX0pTX0ZJTEVfSEVSRSI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9Db250YWN0cy9zY3JpcHQtdGVzdHMvZW5hYmxlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zY3JpcHQtdGVzdHMvZW5hYmxlZC5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9lbmFibGVk
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACitkZXNjcmlwdGlvbigiVGVzdHMgdGhh
dCB0aGUgbmF2aWdhdG9yLmNvbnRhY3RzIG9iamVjdCBpcyBwcmVzZW50LiIpOworCitmdW5jdGlv
biBoYXNDb250YWN0c1Byb3BlcnR5KCkKK3sKKyAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBuYXZp
Z2F0b3IpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5ID09ICJjb250YWN0cyIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRy
dWUoInR5cGVvZiBuYXZpZ2F0b3IuY29udGFjdHMgPT0gJ29iamVjdCciKTsKK3Nob3VsZEJlVHJ1
ZSgiaGFzQ29udGFjdHNQcm9wZXJ0eSgpIik7CitzaG91bGRCZVRydWUoIidjb250YWN0cycgaW4g
bmF2aWdhdG9yIik7CitzaG91bGRCZVRydWUoIm5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eSgnY29u
dGFjdHMnKSIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IGZhbHNlOword2luZG93LnN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0
cy9zY3JpcHQtdGVzdHMvZXJyb3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL2Vycm9yLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL2Vycm9yLmpzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI5IEBACitkZXNjcmlwdGlvbigiVGVzdHMgQ29udGFjdHMgZXJyb3IgY2Fs
bGJhY2sgdXNpbmcgdGhlIG1vY2sgc2VydmljZS4iKTsKKwordmFyIG1vY2tDb2RlID0gMjsKKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLnNldE1vY2tDb250YWN0UGVybWlzc2lvbih0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRNb2NrQ29udGFjdEVycm9yKG1vY2tDb2RlKTsKK30gZWxzZQorICAgIGRlYnVnKCdU
aGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0aG91dCB0aGUgTGF5b3V0VGVzdENvbnRyb2xsZXIn
KTsKKwordmFyIGVycm9yOworbmF2aWdhdG9yLmNvbnRhY3RzLmZpbmQoWydkaXNwbGF5TmFtZSdd
LCBmdW5jdGlvbihjb250YWN0cykgeworICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sg
aW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30sIGZ1bmN0aW9u
KGUpIHsKKyAgICBlcnJvciA9IGU7CisgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnbW9ja0Nv
ZGUnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuVU5LTk9XTl9FUlJPUicsICcwJyk7CisgICAgc2hv
dWxkQmUoJ2Vycm9yLklOVkFMSURfQVJHVU1FTlRfRVJST1InLCAnMScpOworICAgIHNob3VsZEJl
KCdlcnJvci5USU1FT1VUX0VSUk9SJywgJzInKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuUEVORElO
R19PUEVSQVRJT05fRVJST1InLCAnMycpOworICAgIHNob3VsZEJlKCdlcnJvci5JT19FUlJPUics
ICc0Jyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLk5PVF9TVVBQT1JURURfRVJST1InLCAnNScpOwor
ICAgIHNob3VsZEJlKCdlcnJvci5QRVJNSVNTSU9OX0RFTklFRF9FUlJPUicsICcyMCcpOworICAg
IGZpbmlzaEpTVGVzdCgpOworfSk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dp
bmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9k
b20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL3Blcm1pc3Npb24tZGVuaWVkLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9wZXJtaXNzaW9u
LWRlbmllZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3Rz
L3NjcmlwdC10ZXN0cy9wZXJtaXNzaW9uLWRlbmllZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIENvbnRhY3RzIHdoZW4gcGVybWlzc2lvbiBpcyBk
ZW5pZWQsIHVzaW5nIHRoZSBtb2NrIHNlcnZpY2UuIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQ29udGFjdFBl
cm1pc3Npb24oZmFsc2UpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tDb250YWN0
KCIxIiwgIkJvYiIpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90IGJlIHJ1
biB3aXRob3V0IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlcicpOworCit2YXIgZXJyb3I7CituYXZp
Z2F0b3IuY29udGFjdHMuZmluZChbJ2Rpc3BsYXlOYW1lJ10sIGZ1bmN0aW9uKGNvbnRhY3RzKSB7
CisgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScp
OworICAgIGZpbmlzaEpTVGVzdCgpOworfSwgZnVuY3Rpb24oZSkgeworICAgIGVycm9yID0gZTsK
KyAgICBzaG91bGRCZSgnZXJyb3IuY29kZScsICdlcnJvci5QRVJNSVNTSU9OX0RFTklFRF9FUlJP
UicpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL3N1Y2Nlc3MuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL3N1Y2Nlc3MuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zY3JpcHQtdGVz
dHMvc3VjY2Vzcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorZGVzY3JpcHRpb24o
IlRlc3RzIENvbnRhY3RzIHN1Y2Nlc3MgY2FsbGJhY2sgdXNpbmcgdGhlIG1vY2sgc2VydmljZS4i
KTsKKwordmFyIG1vY2tJZCA9ICIxIjsKK3ZhciBtb2NrRGlzcGxheU5hbWUgPSAiQm9iIjsKKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLnNldE1vY2tDb250YWN0UGVybWlzc2lvbih0cnVlKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRNb2NrQ29udGFjdChtb2NrSWQsIG1vY2tEaXNwbGF5TmFtZSk7Cit9IGVsc2UKKyAg
ICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdpdGhvdXQgdGhlIExheW91dFRlc3RD
b250cm9sbGVyJyk7CisKK3ZhciBjb250YWN0OworbmF2aWdhdG9yLmNvbnRhY3RzLmZpbmQoWydk
aXNwbGF5TmFtZSddLCBmdW5jdGlvbihjb250YWN0cykgeworICAgIGNvbnRhY3QgPSBjb250YWN0
c1swXTsKKyAgICBzaG91bGRCZSgnY29udGFjdC5pZCcsICdtb2NrSWQnKTsKKyAgICBzaG91bGRC
ZSgnY29udGFjdC5kaXNwbGF5TmFtZScsICdtb2NrRGlzcGxheU5hbWUnKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKK30sIGZ1bmN0aW9uKGUpIHsKKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFj
ayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7CisKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOwo=
</data>
<flag name="review"
          id="93666"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99240</attachid>
            <date>2011-06-29 22:42:58 -0700</date>
            <delta_ts>2011-06-29 22:45:03 -0700</delta_ts>
            <desc>Fix style check problem</desc>
            <filename>ContactsPatch.txt</filename>
            <type>text/plain</type>
            <size>124353</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29udGFjdHNDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29udGFjdHNDdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb250YWN0
c0N1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTQ29udGFjdHMuaCIKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2lu
Y2x1ZGUgIkNvbnRhY3RGaW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkNvbnRhY3RzLmgiCisjaW5j
bHVkZSAiRE9NU3RyaW5nTGlzdC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmgiCisjaW5jbHVkZSAi
SlNET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlIDxy
dW50aW1lL0pTRnVuY3Rpb24uaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8Q29u
dGFjdEZpbmRDYWxsYmFjaz4gY3JlYXRlQ29udGFjdEZpbmRDYWxsYmFjayhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgaWYgKCF2YWx1ZS5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgeworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAg
IHJldHVybiBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2s6OmNyZWF0ZShvYmplY3QsIGdsb2Jh
bE9iamVjdCk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPENvbnRhY3RFcnJvckNhbGxiYWNrPiBj
cmVhdGVDb250YWN0RXJyb3JDYWxsYmFjayhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCF2YWx1ZS5pbmhl
cml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBK
U09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgIHJldHVybiBKU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrOjpjcmVhdGUob2JqZWN0LCBnbG9iYWxPYmplY3QpOworfQorCitz
dGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmluZE9wdGlvbnM+IGNyZWF0ZUNvbnRhY3RGaW5kT3B0
aW9ucyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgUmVmUHRyPENvbnRh
Y3RGaW5kT3B0aW9ucz4gb3B0aW9ucyA9IENvbnRhY3RGaW5kT3B0aW9uczo6Y3JlYXRlKCk7CisK
KyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIG9wdGlv
bnMucmVsZWFzZSgpOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4
ZWMpOworCisgICAgSlNWYWx1ZSBmaWx0ZXIgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVy
KGV4ZWMsICJmaWx0ZXIiKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAoIWZpbHRlci5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAg
ICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKHVzdHJpbmdUb1N0cmluZyhmaWx0ZXIudG9TdHJpbmco
ZXhlYykpKTsKKyAgICAgICAgb3B0aW9ucy0+c2V0RmlsdGVyKHN0cmluZyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEpTVmFsdWUgbXVsdGlwbGUgPSBvYmplY3QtPmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMs
ICJtdWx0aXBsZSIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmICghbXVsdGlwbGUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAg
ICBvcHRpb25zLT5zZXRNdWx0aXBsZShmaWx0ZXIudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgcmV0dXJuIG9wdGlvbnMucmVsZWFzZSgpOworfQorCitKU1ZhbHVlIEpTQ29udGFjdHM6
OmZpbmQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEFyZ3VtZW50czogU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgRE9NU3RyaW5nTGlzdCwgQ29udGFjdEZpbmRDYWxsYmFjaywgKG9wdGlvbmFs
KUNvbnRhY3RFcnJvckNhbGxiYWNrLCAob3B0aW9uYWwpQ29udGFjdEZpbmRPcHRpb25zCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICBET01TdHJpbmdMaXN0KiBmaWVsZHModG9ET01TdHJpbmdMaXN0KGV4ZWMtPmFyZ3Vt
ZW50KDApKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIFJlZlB0cjxDb250YWN0RmluZENhbGxiYWNrPiBjb250YWN0
RmluZENhbGxiYWNrID0gY3JlYXRlQ29udGFjdEZpbmRDYWxsYmFjayhleGVjLCBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4ZWMt
PmFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIEFTU0VSVChjb250YWN0RmluZENhbGxiYWNrKTsKKwor
ICAgIFJlZlB0cjxDb250YWN0RXJyb3JDYWxsYmFjaz4gY29udGFjdEVycm9yQ2FsbGJhY2sgPSBj
cmVhdGVDb250YWN0RXJyb3JDYWxsYmFjayhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGV4ZWMtPmFyZ3VtZW50KDIpKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIEFTU0VSVChjb250YWN0RXJyb3JDYWxsYmFjayk7CisKKyAgICBSZWZQdHI8Q29u
dGFjdEZpbmRPcHRpb25zPiBjb250YWN0RmluZE9wdGlvbnMgPSBjcmVhdGVDb250YWN0RmluZE9w
dGlvbnMoZXhlYywgZXhlYy0+YXJndW1lbnQoMykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgQVNTRVJUKGNvbnRhY3RG
aW5kT3B0aW9ucyk7CisKKyAgICBtX2ltcGwtPmZpbmQoY29udGV4dCwgZmllbGRzLCBjb250YWN0
RmluZENhbGxiYWNrLnJlbGVhc2UoKSwgY29udGFjdEVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBj
b250YWN0RmluZE9wdGlvbnMucmVsZWFzZSgpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Db250YWN0RXJyb3JD
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
dXN0b21Db250YWN0RXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0N1c3Rv
bUNvbnRhY3RFcnJvckNhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkpTQ29udGFjdEVycm9yLmgiCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK0pTQ3VzdG9tQ29udGFj
dEVycm9yQ2FsbGJhY2s6OkpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2soSlNPYmplY3QqIGNh
bGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogQ29udGFjdEVy
cm9yQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
LCBtX2RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkKK3sKK30KKwordm9pZCBKU0N1c3RvbUNv
bnRhY3RFcnJvckNhbGxiYWNrOjpvbmVycm9yKENvbnRhY3RFcnJvciogY29udGFjdEVycm9yKQor
eworICAgIC8vIEFjdGl2ZURPTU9iamVjdCB3aWxsIG51bGwgb3VyIHBvaW50ZXIgdG8gdGhlIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgd2hlbiBpdCBnb2VzIGF3YXkuCisgICAgaWYgKCFzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxKU0N1c3Rv
bUNvbnRhY3RFcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOworCisgICAgSlNDOjpKU0xvY2sg
bG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fZGF0
YS5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7CisgICAgYXJncy5hcHBlbmQodG9KUyhleGVjLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKGV4ZWMpLCBjb250YWN0RXJyb3IpKTsKKyAgICAKKyAgICBtX2RhdGEuaW52
b2tlQ2FsbGJhY2soYXJncyk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEFDVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbUNvbnRhY3RFcnJvckNh
bGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAg
ICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEpTQ3VzdG9tQ29udGFj
dEVycm9yQ2FsbGJhY2tfaAorI2RlZmluZSBKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrX2gK
KworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RFcnJvckNhbGxiYWNr
LmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBDb250YWN0RXJyb3I7CisKK2Ns
YXNzIEpTQ3VzdG9tQ29udGFjdEVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgQ29udGFjdEVycm9yQ2Fs
bGJhY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTQ3VzdG9tQ29udGFjdEVy
cm9yQ2FsbGJhY2s+IGNyZWF0ZShKU0M6OkpTT2JqZWN0KiBjYWxsYmFjaywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SlNDdXN0b21Db250YWN0RXJyb3JDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrKEpT
Qzo6SlNPYmplY3QqIGNhbGxiYWNrLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgIHZpcnR1YWwg
dm9pZCBvbmVycm9yKENvbnRhY3RFcnJvciopOworICAgIAorICAgIEpTQ2FsbGJhY2tEYXRhIG1f
ZGF0YTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBKU0N1c3RvbUNvbnRhY3RFcnJvckNhbGxiYWNrX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxs
YmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21Db250YWN0RmluZENhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjay5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDdXN0b21Db250
YWN0RmluZENhbGxiYWNrLmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkpTQ29udGFjdEFycmF5LmgiCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworSlNDdXN0b21Db250YWN0RmluZENhbGxi
YWNrOjpKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2soSlNPYmplY3QqIGNhbGxiYWNrLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogQ29udGFjdEZpbmRDYWxsYmFjayhn
bG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZGF0YShjYWxs
YmFjaywgZ2xvYmFsT2JqZWN0KQoreworfQorCit2b2lkIEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxs
YmFjazo6b25zdWNjZXNzKENvbnRhY3RBcnJheSogY29udGFjdHMpCit7CisgICAgLy8gQWN0aXZl
RE9NT2JqZWN0IHdpbGwgbnVsbCBvdXIgcG9pbnRlciB0byB0aGUgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCB3aGVuIGl0IGdvZXMgYXdheS4KKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxs
YmFjaz4gcHJvdGVjdCh0aGlzKTsKKworICAgIEpTQzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2RhdGEuZ2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgIGFyZ3Mu
YXBwZW5kKHRvSlMoZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVj
KSwgY29udGFjdHMpKTsKKyAgICBtX2RhdGEuaW52b2tlQ2FsbGJhY2soYXJncyk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tQ29udGFj
dEZpbmRDYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIEpTQ3VzdG9tQ29udGFjdEZpbmRDYWxsYmFja19oCisjZGVmaW5lIEpTQ3VzdG9t
Q29udGFjdEZpbmRDYWxsYmFja19oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRl
ICJDb250YWN0RmluZENhbGxiYWNrLmgiCisjaW5jbHVkZSAiSlNDYWxsYmFja0RhdGEuaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENv
bnRhY3RBcnJheTsKK2NsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OworCitjbGFzcyBKU0N1c3RvbUNv
bnRhY3RGaW5kQ2FsbGJhY2sgOiBwdWJsaWMgQ29udGFjdEZpbmRDYWxsYmFjayB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDdXN0b21Db250YWN0RmluZENhbGxiYWNrPiBjcmVh
dGUoSlNDOjpKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTQ3VzdG9tQ29udGFjdEZp
bmRDYWxsYmFjayhjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2soSlNDOjpKU09iamVjdCogY2FsbGJh
Y2ssIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25zdWNjZXNzKENv
bnRhY3RBcnJheSopOworICAgIAorICAgIEpTQ2FsbGJhY2tEYXRhIG1fZGF0YTsKK307CisgICAg
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisK
KyNlbmRpZiAvLyBKU0N1c3RvbUNvbnRhY3RGaW5kQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRhY3RzL0NvbnRhY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RfaAor
I2RlZmluZSBDb250YWN0X2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNv
bnRhY3RBZGRyZXNzLmgiCisjaW5jbHVkZSAiQ29udGFjdEFkZHJlc3NBcnJheS5oIgorI2luY2x1
ZGUgIkNvbnRhY3RGaWVsZC5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaWVsZEFycmF5LmgiCisjaW5j
bHVkZSAiQ29udGFjdE5hbWUuaCIKKyNpbmNsdWRlICJDb250YWN0T3JnYW5pemF0aW9uLmgiCisj
aW5jbHVkZSAiQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CisKK2NsYXNzIENvbnRhY3QgOiBwdWJsaWMgUmVm
Q291bnRlZDxDb250YWN0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFj
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENvbnRhY3QoaWQpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFj
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIFBh
c3NSZWZQdHI8Q29udGFjdE5hbWU+IG5hbWUsIGNvbnN0IFN0cmluZyYgbmlja25hbWUsIFBhc3NS
ZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob25lTnVtYmVycywgUGFzc1JlZlB0cjxDb250YWN0
RmllbGRBcnJheT4gZW1haWxzLCBQYXNzUmVmUHRyPENvbnRhY3RBZGRyZXNzQXJyYXk+IGFkZHJl
c3NlcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gaW1zLCBQYXNzUmVmUHRyPENvbnRh
Y3RPcmdhbml6YXRpb25BcnJheT4gb3JnYW5pemF0aW9ucywgZG91YmxlIHJldmlzaW9uLCBkb3Vi
bGUgYmlydGhkYXksIGNvbnN0IFN0cmluZyYgZ2VuZGVyLCBjb25zdCBTdHJpbmcmIG5vdGUsIFBh
c3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob3RvcywgRE9NU3RyaW5nTGlzdCogY2F0ZWdv
cmllcywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gdXJscywgY29uc3QgU3RyaW5nJiB0
aW1lem9uZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdChpZCwg
ZGlzcGxheU5hbWUsIG5hbWUsIG5pY2tuYW1lLCBwaG9uZU51bWJlcnMsIGVtYWlscywgYWRkcmVz
c2VzLCBpbXMsIG9yZ2FuaXphdGlvbnMsIHJldmlzaW9uLCBiaXJ0aGRheSwgZ2VuZGVyLCBub3Rl
LCBwaG90b3MsIGNhdGVnb3JpZXMsIHVybHMsIHRpbWV6b25lKSk7CisgICAgfQorCisgICAgY29u
c3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TmFtZTsgfQorICAgIHZvaWQg
c2V0RGlzcGxheU5hbWUoY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSkgeyBtX2Rpc3BsYXlOYW1l
ID0gZGlzcGxheU5hbWU7IH0KKyAgICBDb250YWN0TmFtZSogbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0TmFtZShQYXNzUmVmUHRyPENvbnRhY3ROYW1l
PiBuYW1lKSB7IG1fbmFtZSA9IG5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5pY2tuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uaWNrbmFtZTsgfQorICAgIHZvaWQgc2V0Tmlja25hbWUoY29uc3Qg
U3RyaW5nJiBuaWNrbmFtZSkgeyBtX25pY2tuYW1lID0gbmlja25hbWU7IH0KKyAgICBDb250YWN0
RmllbGRBcnJheSogcGhvbmVOdW1iZXJzKCkgY29uc3QgeyByZXR1cm4gbV9waG9uZU51bWJlcnMu
Z2V0KCk7IH0KKyAgICB2b2lkIHNldFBob25lTnVtYmVycyhQYXNzUmVmUHRyPENvbnRhY3RGaWVs
ZEFycmF5PiBwaG9uZU51bWJlcnMpIHsgbV9waG9uZU51bWJlcnMgPSBwaG9uZU51bWJlcnM7IH0K
KyAgICBDb250YWN0RmllbGRBcnJheSogZW1haWxzKCkgY29uc3QgeyByZXR1cm4gbV9lbWFpbHMu
Z2V0KCk7IH0KKyAgICB2b2lkIHNldEVtYWlscyhQYXNzUmVmUHRyPENvbnRhY3RGaWVsZEFycmF5
PiBlbWFpbHMpIHsgbV9lbWFpbHMgPSBlbWFpbHM7IH0KKyAgICBDb250YWN0QWRkcmVzc0FycmF5
KiBhZGRyZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3Nlcy5nZXQoKTsgfQorICAgIHZv
aWQgc2V0QWRkcmVzc2VzKFBhc3NSZWZQdHI8Q29udGFjdEFkZHJlc3NBcnJheT4gYWRkcmVzc2Vz
KSB7IG1fYWRkcmVzc2VzID0gYWRkcmVzc2VzOyB9CisgICAgQ29udGFjdEZpZWxkQXJyYXkqIGlt
cygpIGNvbnN0IHsgcmV0dXJuIG1faW1zLmdldCgpOyB9CisgICAgdm9pZCBzZXRJbXMoUGFzc1Jl
ZlB0cjxDb250YWN0RmllbGRBcnJheT4gaW1zKSB7IG1faW1zID0gaW1zOyB9CisgICAgQ29udGFj
dE9yZ2FuaXphdGlvbkFycmF5KiBvcmdhbml6YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcmdh
bml6YXRpb25zLmdldCgpOyB9CisgICAgdm9pZCBzZXRPcmdhbml6YXRpb25zKFBhc3NSZWZQdHI8
Q29udGFjdE9yZ2FuaXphdGlvbkFycmF5PiBvcmdhbml6YXRpb25zKSB7IG1fb3JnYW5pemF0aW9u
cyA9IG9yZ2FuaXphdGlvbnM7IH0KKyAgICBkb3VibGUgcmV2aXNpb24oKSBjb25zdCB7IHJldHVy
biBtX3JldmlzaW9uOyB9CisgICAgdm9pZCBzZXRSZXZpc2lvbihkb3VibGUgcmV2aXNpb24pIHsg
bV9yZXZpc2lvbiA9IHJldmlzaW9uOyB9CisgICAgZG91YmxlIGJpcnRoZGF5KCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXJ0aGRheTsgfQorICAgIHZvaWQgc2V0QmlydGhkYXkoZG91YmxlIGJpcnRoZGF5
KSB7IG1fYmlydGhkYXkgPSBiaXJ0aGRheTsgfQorICAgIGNvbnN0IFN0cmluZyYgZ2VuZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9nZW5kZXI7IH0KKyAgICB2b2lkIHNldEdlbmRlcihjb25zdCBTdHJp
bmcmIGdlbmRlcikgeyBtX2dlbmRlciA9IGdlbmRlcjsgfQorICAgIGNvbnN0IFN0cmluZyYgbm90
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90ZTsgfQorICAgIHZvaWQgc2V0Tm90ZShjb25zdCBTdHJp
bmcmIG5vdGUpIHsgbV9ub3RlID0gbm90ZTsgfQorICAgIENvbnRhY3RGaWVsZEFycmF5KiBwaG90
b3MoKSBjb25zdCB7IHJldHVybiBtX3Bob3Rvcy5nZXQoKTsgfQorICAgIHZvaWQgc2V0UGhvdG9z
KFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IHBob3RvcykgeyBtX3Bob3RvcyA9IHBob3Rv
czsgfQorICAgIERPTVN0cmluZ0xpc3QqIGNhdGVnb3JpZXMoKSBjb25zdCB7IHJldHVybiBtX2Nh
dGVnb3JpZXM7IH0KKyAgICB2b2lkIHNldENhdGVnb3JpZXMoRE9NU3RyaW5nTGlzdCogY2F0ZWdv
cmllcykgeyBtX2NhdGVnb3JpZXMgPSBjYXRlZ29yaWVzOyB9CisgICAgQ29udGFjdEZpZWxkQXJy
YXkqIHVybHMoKSBjb25zdCB7IHJldHVybiBtX3VybHMuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFVy
bHMoUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gdXJscykgeyBtX3VybHMgPSB1cmxzOyB9
CisgICAgY29uc3QgU3RyaW5nJiB0aW1lem9uZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXpvbmU7
IH0KKyAgICB2b2lkIHNldFRpbWV6b25lKGNvbnN0IFN0cmluZyYgdGltZXpvbmUpIHsgbV90aW1l
em9uZSA9IHRpbWV6b25lOyB9CisKK3ByaXZhdGU6CisgICAgQ29udGFjdChjb25zdCBTdHJpbmcm
IGlkKQorICAgICAgICA6IG1faWQoaWQpCisgICAgeworICAgIH0KKyAgICBDb250YWN0KGNvbnN0
IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIFBhc3NSZWZQdHI8Q29udGFj
dE5hbWU+IG5hbWUsIGNvbnN0IFN0cmluZyYgbmlja25hbWUsIFBhc3NSZWZQdHI8Q29udGFjdEZp
ZWxkQXJyYXk+IHBob25lTnVtYmVycywgUGFzc1JlZlB0cjxDb250YWN0RmllbGRBcnJheT4gZW1h
aWxzLCBQYXNzUmVmUHRyPENvbnRhY3RBZGRyZXNzQXJyYXk+IGFkZHJlc3NlcywgUGFzc1JlZlB0
cjxDb250YWN0RmllbGRBcnJheT4gaW1zLCBQYXNzUmVmUHRyPENvbnRhY3RPcmdhbml6YXRpb25B
cnJheT4gb3JnYW5pemF0aW9ucywgZG91YmxlIHJldmlzaW9uLCBkb3VibGUgYmlydGhkYXksIGNv
bnN0IFN0cmluZyYgZ2VuZGVyLCBjb25zdCBTdHJpbmcmIG5vdGUsIFBhc3NSZWZQdHI8Q29udGFj
dEZpZWxkQXJyYXk+IHBob3RvcywgRE9NU3RyaW5nTGlzdCogY2F0ZWdvcmllcywgUGFzc1JlZlB0
cjxDb250YWN0RmllbGRBcnJheT4gdXJscywgY29uc3QgU3RyaW5nJiB0aW1lem9uZSkKKyAgICAg
ICAgOiBtX2lkKGlkKQorICAgICAgICAsIG1fZGlzcGxheU5hbWUoZGlzcGxheU5hbWUpCisgICAg
ICAgICwgbV9uYW1lKG5hbWUpCisgICAgICAgICwgbV9uaWNrbmFtZShuaWNrbmFtZSkKKyAgICAg
ICAgLCBtX3Bob25lTnVtYmVycyhwaG9uZU51bWJlcnMpCisgICAgICAgICwgbV9lbWFpbHMoZW1h
aWxzKQorICAgICAgICAsIG1fYWRkcmVzc2VzKGFkZHJlc3NlcykKKyAgICAgICAgLCBtX2ltcyhp
bXMpCisgICAgICAgICwgbV9vcmdhbml6YXRpb25zKG9yZ2FuaXphdGlvbnMpCisgICAgICAgICwg
bV9yZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgLCBtX2JpcnRoZGF5KGJpcnRoZGF5KQorICAg
ICAgICAsIG1fZ2VuZGVyKGdlbmRlcikKKyAgICAgICAgLCBtX25vdGUobm90ZSkKKyAgICAgICAg
LCBtX3Bob3RvcyhwaG90b3MpCisgICAgICAgICwgbV9jYXRlZ29yaWVzKGNhdGVnb3JpZXMpCisg
ICAgICAgICwgbV91cmxzKHVybHMpCisgICAgICAgICwgbV90aW1lem9uZSh0aW1lem9uZSkKKyAg
ICB7CisgICAgfQorCisgICAgU3RyaW5nIG1faWQ7CisgICAgU3RyaW5nIG1fZGlzcGxheU5hbWU7
CisgICAgUmVmUHRyPENvbnRhY3ROYW1lPiBtX25hbWU7CisgICAgU3RyaW5nIG1fbmlja25hbWU7
CisgICAgUmVmUHRyPENvbnRhY3RGaWVsZEFycmF5PiBtX3Bob25lTnVtYmVyczsKKyAgICBSZWZQ
dHI8Q29udGFjdEZpZWxkQXJyYXk+IG1fZW1haWxzOworICAgIFJlZlB0cjxDb250YWN0QWRkcmVz
c0FycmF5PiBtX2FkZHJlc3NlczsKKyAgICBSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IG1faW1z
OworICAgIFJlZlB0cjxDb250YWN0T3JnYW5pemF0aW9uQXJyYXk+IG1fb3JnYW5pemF0aW9uczsK
KyAgICBkb3VibGUgbV9yZXZpc2lvbjsKKyAgICBkb3VibGUgbV9iaXJ0aGRheTsKKyAgICBTdHJp
bmcgbV9nZW5kZXI7CisgICAgU3RyaW5nIG1fbm90ZTsKKyAgICBSZWZQdHI8Q29udGFjdEZpZWxk
QXJyYXk+IG1fcGhvdG9zOworICAgIERPTVN0cmluZ0xpc3QqIG1fY2F0ZWdvcmllczsKKyAgICBS
ZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IG1fdXJsczsKKyAgICBTdHJpbmcgbV90aW1lem9uZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNU
UykKKworI2VuZGlmIC8vIENvbnRhY3RfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMv
Q29udGFjdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFj
dC5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0Lmlk
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFj
ZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLCAKKyAgICAgICAgT21pdENvbnN0cnVj
dG9yCisgICAgXSBDb250YWN0IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyBpZDsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBkaXNwbGF5TmFtZTsKKyAgICAgICAg
YXR0cmlidXRlIENvbnRhY3ROYW1lIG5hbWU7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
bmlja25hbWU7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRBcnJheSBwaG9uZU51bWJl
cnM7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRBcnJheSBlbWFpbHM7CisgICAgICAg
IGF0dHJpYnV0ZSBDb250YWN0QWRkcmVzc0FycmF5IGFkZHJlc3NlczsKKyAgICAgICAgYXR0cmli
dXRlIENvbnRhY3RGaWVsZEFycmF5IGltczsKKyAgICAgICAgYXR0cmlidXRlIENvbnRhY3RPcmdh
bml6YXRpb25BcnJheSBvcmdhbml6YXRpb25zOworICAgICAgICBhdHRyaWJ1dGUgRGF0ZSByZXZp
c2lvbjsKKyAgICAgICAgYXR0cmlidXRlIERhdGUgYmlydGhkYXk7CisgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgZ2VuZGVyOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5vdGU7Cisg
ICAgICAgIGF0dHJpYnV0ZSBDb250YWN0RmllbGRBcnJheSBwaG90b3M7CisgICAgICAgIGF0dHJp
YnV0ZSBET01TdHJpbmdMaXN0IGNhdGVnb3JpZXM7CisgICAgICAgIGF0dHJpYnV0ZSBDb250YWN0
RmllbGRBcnJheSB1cmxzOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHRpbWV6b25lOwor
ICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QWRkcmVzcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QWRkcmVzcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0QWRkcmVzc19oCisjZGVm
aW5lIENvbnRhY3RBZGRyZXNzX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0QWRkcmVzcyA6IHB1YmxpYyBSZWZDb3VudGVk
PENvbnRhY3RBZGRyZXNzPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFj
dEFkZHJlc3M+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENv
bnRhY3RBZGRyZXNzKCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0QWRk
cmVzcz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkLCBjb25zdCBTdHJpbmcmIHN0cmVl
dEFkZHJlc3MsIGNvbnN0IFN0cmluZyYgbG9jYWxpdHksIGNvbnN0IFN0cmluZyYgcmVnaW9uLCBj
b25zdCBTdHJpbmcmIHBvc3RhbENvZGUsIGNvbnN0IFN0cmluZyYgY291bnRyeSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdEFkZHJlc3MoZm9ybWF0dGVkLCBzdHJl
ZXRBZGRyZXNzLCBsb2NhbGl0eSwgcmVnaW9uLCBwb3N0YWxDb2RlLCBjb3VudHJ5KSk7CisgICAg
fQorCisgICAgY29uc3QgU3RyaW5nJiBmb3JtYXR0ZWQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1h
dHRlZDsgfQorICAgIHZvaWQgc2V0Rm9ybWF0dGVkKGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkKSB7
IG1fZm9ybWF0dGVkID0gZm9ybWF0dGVkOyB9CisgICAgY29uc3QgU3RyaW5nJiBzdHJlZXRBZGRy
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlZXRBZGRyZXNzOyB9CisgICAgdm9pZCBzZXRTdHJl
ZXRBZGRyZXNzKGNvbnN0IFN0cmluZyYgc3RyZWV0QWRkcmVzcykgeyBtX3N0cmVldEFkZHJlc3Mg
PSBzdHJlZXRBZGRyZXNzOyB9CisgICAgY29uc3QgU3RyaW5nJiBsb2NhbGl0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxpdHk7IH0KKyAgICB2b2lkIHNldExvY2FsaXR5KGNvbnN0IFN0cmluZyYg
bG9jYWxpdHkpIHsgbV9sb2NhbGl0eSA9IGxvY2FsaXR5OyB9CisgICAgY29uc3QgU3RyaW5nJiBy
ZWdpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbjsgfQorICAgIHZvaWQgc2V0UmVnaW9uKGNv
bnN0IFN0cmluZyYgcmVnaW9uKSB7IG1fcmVnaW9uID0gcmVnaW9uOyB9CisgICAgY29uc3QgU3Ry
aW5nJiBwb3N0YWxDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9wb3N0YWxDb2RlOyB9CisgICAgdm9p
ZCBzZXRQb3N0YWxDb2RlKGNvbnN0IFN0cmluZyYgcG9zdGFsQ29kZSkgeyBtX3Bvc3RhbENvZGUg
PSBwb3N0YWxDb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBjb3VudHJ5KCkgY29uc3QgeyByZXR1
cm4gbV9jb3VudHJ5OyB9CisgICAgdm9pZCBzZXRDb3VudHJ5KGNvbnN0IFN0cmluZyYgY291bnRy
eSkgeyBtX2NvdW50cnkgPSBjb3VudHJ5OyB9CisKK3ByaXZhdGU6CisgICAgQ29udGFjdEFkZHJl
c3MoKSB7IH0KKyAgICBDb250YWN0QWRkcmVzcyhjb25zdCBTdHJpbmcmIGZvcm1hdHRlZCwgY29u
c3QgU3RyaW5nJiBzdHJlZXRBZGRyZXNzLCBjb25zdCBTdHJpbmcmIGxvY2FsaXR5LCBjb25zdCBT
dHJpbmcmIHJlZ2lvbiwgY29uc3QgU3RyaW5nJiBwb3N0YWxDb2RlLCBjb25zdCBTdHJpbmcmIGNv
dW50cnkpCisgICAgICAgIDogbV9mb3JtYXR0ZWQoZm9ybWF0dGVkKQorICAgICAgICAsIG1fc3Ry
ZWV0QWRkcmVzcyhzdHJlZXRBZGRyZXNzKQorICAgICAgICAsIG1fbG9jYWxpdHkobG9jYWxpdHkp
CisgICAgICAgICwgbV9yZWdpb24ocmVnaW9uKQorICAgICAgICAsIG1fcG9zdGFsQ29kZShwb3N0
YWxDb2RlKQorICAgICAgICAsIG1fY291bnRyeShjb3VudHJ5KQorICAgIHsKKyAgICB9CisKKyAg
ICBTdHJpbmcgbV9mb3JtYXR0ZWQ7CisgICAgU3RyaW5nIG1fc3RyZWV0QWRkcmVzczsKKyAgICBT
dHJpbmcgbV9sb2NhbGl0eTsKKyAgICBTdHJpbmcgbV9yZWdpb247CisgICAgU3RyaW5nIG1fcG9z
dGFsQ29kZTsKKyAgICBTdHJpbmcgbV9jb3VudHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8gQ29udGFjdEFk
ZHJlc3NfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFkZHJlc3MuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNzLmlk
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNz
LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLCAKKyAgICAgICAgT21pdENvbnN0
cnVjdG9yCisgICAgXSBDb250YWN0QWRkcmVzcyB7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgZm9ybWF0dGVkOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHN0cmVldEFkZHJlc3M7
CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbG9jYWxpdHk7CisgICAgICAgIGF0dHJpYnV0
ZSBET01TdHJpbmcgcmVnaW9uOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHBvc3RhbENv
ZGU7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgY291bnRyeTsKKyAgICB9OworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFkZHJlc3NBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFkZHJlc3NBcnJheS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QWRkcmVzc0Fy
cmF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb250YWN0QWRkcmVzc0FycmF5LmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ29udGFjdEFkZHJlc3NBcnJheTo6Q29udGFjdEFkZHJl
c3NBcnJheSgpCit7Cit9CisKK0NvbnRhY3RBZGRyZXNzKiBDb250YWN0QWRkcmVzc0FycmF5Ojpp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmIChpbmRleCA+PSBtX2FkZHJlc3Nl
cy5zaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2FkZHJlc3Nlc1tpbmRl
eF0uZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RBZGRyZXNz
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QWRk
cmVzc0FycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250
YWN0QWRkcmVzc0FycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRh
Y3RBZGRyZXNzQXJyYXlfaAorI2RlZmluZSBDb250YWN0QWRkcmVzc0FycmF5X2gKKworI2lmIEVO
QUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RBZGRyZXNzLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RBZGRyZXNzQXJyYXkgOiBwdWJsaWMgUmVmQ291
bnRlZDxDb250YWN0QWRkcmVzc0FycmF5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q29udGFjdEFkZHJlc3NBcnJheT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ29udGFjdEFkZHJlc3NBcnJheSgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3Nlcy5zaXplKCk7IH0KKyAgICBDb250
YWN0QWRkcmVzcyogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdm9pZCBzZXQodW5z
aWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8Q29udGFjdEFkZHJlc3M+KTsKKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc2VzLmlzRW1wdHkoKTsgfQorICAgIHZvaWQg
Y2xlYXIoKSB7IG1fYWRkcmVzc2VzLmNsZWFyKCk7IH0KKyAgICB2b2lkIGFwcGVuZChQYXNzUmVm
UHRyPENvbnRhY3RBZGRyZXNzPiBhZGRyZXNzKSB7IG1fYWRkcmVzc2VzLmFwcGVuZChhZGRyZXNz
KTsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3RBZGRyZXNzQXJyYXkoKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8Q29udGFjdEFkZHJlc3M+ID4gbV9hZGRyZXNzZXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBD
b250YWN0QWRkcmVzc0FycmF5X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRh
Y3RBZGRyZXNzQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3RBZGRyZXNzQXJyYXkuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
Y29udGFjdHMvQ29udGFjdEFkZHJlc3NBcnJheS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
Cittb2R1bGUgY29yZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1D
T05UQUNUUywKKyAgICAgICAgSGFzSW5kZXhHZXR0ZXIsCisgICAgICAgIE5vU3RhdGljVGFibGVz
CisgICAgXSBDb250YWN0QWRkcmVzc0FycmF5IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworICAgICAgICBDb250YWN0QWRkcmVzcyBpdGVtKGluIFtJ
c0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0QXJyYXkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250YWN0QXJyYXkuaCIKKworI2lmIEVO
QUJMRShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb250YWN0QXJyYXk6OkNv
bnRhY3RBcnJheSgpCit7Cit9CisKK0NvbnRhY3QqIENvbnRhY3RBcnJheTo6aXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPj0gbV9jb250YWN0cy5zaXplKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2NvbnRhY3RzW2luZGV4XS5nZXQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QXJyYXkuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgQ29udGFjdEFycmF5X2gKKyNkZWZpbmUgQ29udGFjdEFycmF5X2gK
KworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3QuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFjdEFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8
Q29udGFjdEFycmF5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGFjdEFy
cmF5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0
QXJyYXkoKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9jb250YWN0cy5zaXplKCk7IH0KKyAgICBDb250YWN0KiBpdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxDb250YWN0Pik7
CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhY3RzLmlzRW1wdHko
KTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fY29udGFjdHMuY2xlYXIoKTsgfQorICAgIHZvaWQg
YXBwZW5kKFBhc3NSZWZQdHI8Q29udGFjdD4gY29udGFjdCkgeyBtX2NvbnRhY3RzLmFwcGVuZChj
b250YWN0KTsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3RBcnJheSgpOworCisgICAgVmVjdG9y
PFJlZlB0cjxDb250YWN0PiA+IG1fY29udGFjdHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0QXJy
YXlfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0QXJyYXkuaWRsCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEFycmF5LmlkbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisg
ICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLAorICAgICAgICBIYXNJbmRleEdldHRlciwKKyAg
ICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIENvbnRhY3RBcnJheSB7CisgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKyAgICAgICAgQ29udGFjdCBpdGVt
KGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29u
dGFjdENvbnRyb2xsZXIuaCIKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNv
bnRhY3RBcnJheS5oIgorI2luY2x1ZGUgIkNvbnRhY3RDbGllbnQuaCIKKyNpbmNsdWRlICJDb250
YWN0RXJyb3IuaCIKKyNpbmNsdWRlICJDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJDb250YWN0UGVuZGluZ09wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xp
c3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitDb250YWN0Q29udHJvbGxlcjo6Q29udGFjdENvbnRyb2xsZXIoUGFnZSog
cGFnZSwgQ29udGFjdENsaWVudCogY2xpZW50KQorICAgIDogbV9wYWdlKHBhZ2UpCisgICAgLCBt
X2NsaWVudChjbGllbnQpCisgICAgLCBtX2ZpbmRDYWxsYmFjaygwKQorICAgICwgbV9lcnJvckNh
bGxiYWNrKDApCisgICAgLCBtX3BlbmRpbmdPcGVyYXRpb24oMCkKK3sKK30KKworQ29udGFjdENv
bnRyb2xsZXI6On5Db250YWN0Q29udHJvbGxlcigpCit7Cit9CisKK3ZvaWQgQ29udGFjdENvbnRy
b2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKCkKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAg
IG1fY2xpZW50LT5yZXF1ZXN0UGVybWlzc2lvbigpOworfQorCit2b2lkIENvbnRhY3RDb250cm9s
bGVyOjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKTsKK30KKworc3RhdGljIHZv
aWQgY2FsbEZpbmRDYWxsYmFjayh2b2lkKiBjb250ZXh0KQoreworICAgIENvbnRhY3RDb250cm9s
bGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8Q29udGFjdENvbnRyb2xsZXIqPihjb250ZXh0
KTsKKyAgICBpZiAoY29udHJvbGxlci0+ZmluZENhbGxiYWNrKCkpCisgICAgICAgIGNvbnRyb2xs
ZXItPmZpbmRDYWxsYmFjaygpLT5vbnN1Y2Nlc3MoY29udHJvbGxlci0+Y29udGFjdHMoKSk7CisK
KyAgICBjb250cm9sbGVyLT5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCBjYWxsRXJyb3JDYWxs
YmFjayh2b2lkKiBjb250ZXh0KQoreworICAgIENvbnRhY3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8Q29udGFjdENvbnRyb2xsZXIqPihjb250ZXh0KTsKKyAgICBpZiAoY29u
dHJvbGxlci0+ZXJyb3JDYWxsYmFjaygpKQorICAgICAgICBjb250cm9sbGVyLT5lcnJvckNhbGxi
YWNrKCktPm9uZXJyb3IoY29udHJvbGxlci0+ZXJyb3IoKSk7CisKKyAgICBjb250cm9sbGVyLT5j
bGVhcigpOworfQorCit2b2lkIENvbnRhY3RDb250cm9sbGVyOjpjb250YWN0RmluZGVkKENvbnRh
Y3RBcnJheSogY29udGFjdHMpCit7CisgICAgbV9jb250YWN0cyA9IGNvbnRhY3RzOworICAgIGNh
bGxPbk1haW5UaHJlYWQoY2FsbEZpbmRDYWxsYmFjaywgdGhpcyk7Cit9CisKK3ZvaWQgQ29udGFj
dENvbnRyb2xsZXI6OmVycm9yT2NjdXJyZWQoQ29udGFjdEVycm9yKiBlcnJvcikKK3sKKyAgICBt
X2Vycm9yID0gZXJyb3I7CisgICAgY2FsbE9uTWFpblRocmVhZChjYWxsRXJyb3JDYWxsYmFjaywg
dGhpcyk7Cit9CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OmZpbmQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBmaWVsZHMsIFBhc3NS
ZWZQdHI8Q29udGFjdEZpbmRDYWxsYmFjaz4gZmluZENhbGxiYWNrLCBQYXNzUmVmUHRyPENvbnRh
Y3RFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kT3B0
aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAobV9wZW5kaW5nT3BlcmF0aW9uKSB7CisgICAgICAg
IFJlZlB0cjxDb250YWN0RXJyb3I+IGVycm9yID0gQ29udGFjdEVycm9yOjpjcmVhdGUoQ29udGFj
dEVycm9yOjpQRU5ESU5HX09QRVJBVElPTl9FUlJPUik7CisgICAgICAgIGVycm9yT2NjdXJyZWQo
ZXJyb3IuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9wZW5kaW5nT3Bl
cmF0aW9uID0gQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uOjpjcmVhdGUoY29udGV4dCwgY2xp
ZW50KCksIGZpZWxkcy5nZXQoKSwgb3B0aW9ucy5nZXQoKSk7CisKKyAgICBtX2ZpbmRDYWxsYmFj
ayA9IGZpbmRDYWxsYmFjazsKKyAgICBtX2Vycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOwor
CisgICAgbV9jbGllbnQtPnJlcXVlc3RQZXJtaXNzaW9uKCk7Cit9CisKK3ZvaWQgQ29udGFjdENv
bnRyb2xsZXI6OnNldEFsbG93ZWQoYm9vbCBhbGxvd2VkKQoreworICAgIGlmIChhbGxvd2VkKQor
ICAgICAgICBvbkNvbmZpcm1lZCgpOworICAgIGVsc2UKKyAgICAgICAgb25EZW5pZWQoKTsKK30K
Kwordm9pZCBDb250YWN0Q29udHJvbGxlcjo6b25Db25maXJtZWQoKQoreworICAgIGlmIChtX3Bl
bmRpbmdPcGVyYXRpb24pCisgICAgICAgIG1fcGVuZGluZ09wZXJhdGlvbi0+c3RhcnQoKTsKK30K
Kwordm9pZCBDb250YWN0Q29udHJvbGxlcjo6b25EZW5pZWQoKQoreworICAgIFJlZlB0cjxDb250
YWN0RXJyb3I+IGVycm9yID0gQ29udGFjdEVycm9yOjpjcmVhdGUoQ29udGFjdEVycm9yOjpQRVJN
SVNTSU9OX0RFTklFRF9FUlJPUik7CisgICAgZXJyb3JPY2N1cnJlZChlcnJvci5nZXQoKSk7Cit9
CisKK3ZvaWQgQ29udGFjdENvbnRyb2xsZXI6OmNsZWFyKCkKK3sKKyAgICBtX2ZpbmRDYWxsYmFj
ayA9IDA7CisgICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKworICAgIGlmIChtX3BlbmRpbmdPcGVy
YXRpb24pCisgICAgICAgIG1fcGVuZGluZ09wZXJhdGlvbi0+c3RvcCgpOworICAgIG1fcGVuZGlu
Z09wZXJhdGlvbiA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFj
dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRh
Y3RDb250cm9sbGVyX2gKKyNkZWZpbmUgQ29udGFjdENvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxF
KENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29udGFjdEVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRl
ICJDb250YWN0RmluZENhbGxiYWNrLmgiCisjaW5jbHVkZSAiQ29udGFjdEZpbmRPcHRpb25zLmgi
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUGFnZTsKK2NsYXNzIEZyYW1lOworY2xhc3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIENv
bnRhY3RBcnJheTsKK2NsYXNzIENvbnRhY3RDbGllbnQ7CitjbGFzcyBDb250YWN0UGVuZGluZ09w
ZXJhdGlvbjsKKworY2xhc3MgQ29udGFjdENvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvbnRhY3RDb250cm9sbGVyKTsKK3B1YmxpYzoKKyAgICBDb250YWN0Q29udHJvbGxl
cihQYWdlKiwgQ29udGFjdENsaWVudCopOworICAgIH5Db250YWN0Q29udHJvbGxlcigpOworCisg
ICAgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigpOworICAgIHZvaWQgY2FuY2VsUGVybWlzc2lvblJl
cXVlc3QoKTsKKworICAgIHZvaWQgY29udGFjdEZpbmRlZChDb250YWN0QXJyYXkqKTsKKyAgICB2
b2lkIGVycm9yT2NjdXJyZWQoQ29udGFjdEVycm9yKik7CisKKyAgICB2b2lkIGZpbmQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIFBhc3NSZWZQdHI8
Q29udGFjdEZpbmRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8Q29udGFjdEVycm9yQ2FsbGJhY2s+LCBQ
YXNzUmVmUHRyPENvbnRhY3RGaW5kT3B0aW9ucz4pOworICAgIHZvaWQgY2FuY2VsKCk7CisgICAg
dm9pZCBjbGVhcigpOworCisgICAgQ29udGFjdENsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9j
bGllbnQ7IH0KKyAgICBDb250YWN0RXJyb3IqIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJv
ci5nZXQoKTsgfQorICAgIENvbnRhY3RBcnJheSogY29udGFjdHMoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRhY3RzLmdldCgpOyB9CisgICAgQ29udGFjdEZpbmRDYWxsYmFjayogZmluZENhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9maW5kQ2FsbGJhY2suZ2V0KCk7IH0KKyAgICBDb250YWN0RXJy
b3JDYWxsYmFjayogZXJyb3JDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDYWxsYmFj
ay5nZXQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0QWxsb3dlZChib29sKTsKKworcHJpdmF0ZToK
KyAgICBQYWdlKiBtX3BhZ2U7CisgICAgQ29udGFjdENsaWVudCogbV9jbGllbnQ7CisgICAgUmVm
UHRyPENvbnRhY3RBcnJheT4gbV9jb250YWN0czsKKyAgICBSZWZQdHI8Q29udGFjdEVycm9yPiBt
X2Vycm9yOworICAgIFJlZlB0cjxDb250YWN0RmluZENhbGxiYWNrPiBtX2ZpbmRDYWxsYmFjazsK
KyAgICBSZWZQdHI8Q29udGFjdEVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICBS
ZWZQdHI8Q29udGFjdFBlbmRpbmdPcGVyYXRpb24+IG1fcGVuZGluZ09wZXJhdGlvbjsKKworICAg
IHZvaWQgb25Db25maXJtZWQoKTsKKyAgICB2b2lkIG9uRGVuaWVkKCk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAv
LyBDb250YWN0Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250
YWN0RXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0
RXJyb3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RF
cnJvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0RXJyb3JfaAor
I2RlZmluZSBDb250YWN0RXJyb3JfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRhY3RFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVk
PENvbnRhY3RFcnJvcj4geworcHVibGljOgorICAgIGVudW0gRXJyb3JDb2RlIHsKKyAgICAgICAg
VU5LTk9XTl9FUlJPUiA9IDAsCisgICAgICAgIElOVkFMSURfQVJHVU1FTlRfRVJST1IgPSAxLAor
ICAgICAgICBUSU1FT1VUX0VSUk9SID0gMiwKKyAgICAgICAgUEVORElOR19PUEVSQVRJT05fRVJS
T1IgPSAzLAorICAgICAgICBJT19FUlJPUiA9IDQsCisgICAgICAgIE5PVF9TVVBQT1JURURfRVJS
T1IgPSA1LAorICAgICAgICBQRVJNSVNTSU9OX0RFTklFRF9FUlJPUiA9IDIwIAorICAgIH07CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RXJyb3I+IGNyZWF0ZShFcnJvckNvZGUgY29k
ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RFcnJvcihjb2RlKSk7IH0KKyAgICAKKyAg
ICBFcnJvckNvZGUgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQ29udGFjdEVycm9yKEVycm9yQ29kZSBjb2RlKQorICAgICAgICAgICAgOiBt
X2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgRXJyb3JDb2RlIG1f
Y29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShD
T05UQUNUUykKKworI2VuZGlmIC8vIENvbnRhY3RFcnJvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250YWN0cy9Db250YWN0RXJyb3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRhY3RzL0NvbnRhY3RFcnJvci5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9jb250YWN0cy9Db250YWN0RXJyb3IuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9k
dWxlIGNvcmUgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9Q09OVEFD
VFMKKyAgICBdIENvbnRhY3RFcnJvciB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBzaG9ydCBjb2RlOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFVOS05PV05f
RVJST1IgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTlZBTElEX0FSR1VNRU5U
X0VSUk9SID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgVElNRU9VVF9FUlJPUiA9
IDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFTkRJTkdfT1BFUkFUSU9OX0VSUk9S
ID0gMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSU9fRVJST1IgPSA0OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBOT1RfU1VQUE9SVEVEX0VSUk9SID0gNTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUEVSTUlTU0lPTl9ERU5JRURfRVJST1IgPSAyMDsKKyAgICB9
OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RXJyb3JDYWxsYmFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RFcnJvckNh
bGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0
RXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0
RXJyb3JDYWxsYmFja19oCisjZGVmaW5lIENvbnRhY3RFcnJvckNhbGxiYWNrX2gKKworI2luY2x1
ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKKyNp
ZiBFTkFCTEUoQ09OVEFDVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFj
dEVycm9yOworCitjbGFzcyBDb250YWN0RXJyb3JDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVk
PENvbnRhY3RFcnJvckNhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6
CisgICAgQ29udGFjdEVycm9yQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykgeyB9CisgICAgdmlydHVhbCB+Q29u
dGFjdEVycm9yQ2FsbGJhY2soKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25lcnJvcihDb250YWN0
RXJyb3IqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBQb3NpdGlvbkVycm9yQ2FsbGJhY2tfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgQ29udGFjdEZpZWxkX2gKKyNkZWZpbmUgQ29udGFjdEZpZWxkX2gKKwor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworI2lmIEVOQUJMRShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b250YWN0RmllbGQgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0RmllbGQ+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmllbGQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRhY3RGaWVsZCgpKTsKKyAgICB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHByZWYpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENvbnRhY3RGaWVsZCh0eXBlLCB2YWx1ZSwgcHJlZikpOworICAgIH0KKworICAg
IGNvbnN0IFN0cmluZyYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHZvaWQg
c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgdm9pZCBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQorICAgIGJvb2wg
cHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZjsgfQorICAgIHZvaWQgc2V0UHJlZihib29sIHBy
ZWYpIHsgbV9wcmVmID0gcHJlZjsgfQorCitwcml2YXRlOgorICAgIENvbnRhY3RGaWVsZCgpIHsg
fQorICAgIENvbnRhY3RGaWVsZChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUsIGJvb2wgcHJlZikKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQorICAgICAgICAsIG1fcHJlZihwcmVmKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJp
bmcgbV90eXBlOworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIGJvb2wgbV9wcmVmOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisj
ZW5kaWYgLy8gQ29udGFjdEZpZWxkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RGaWVsZC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdEZpZWxkLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0Nv
bnRhY3RGaWVsZC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCittb2R1bGUgY29yZSB7CisK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1DT05UQUNUUywgCisgICAgICAg
IE9taXRDb25zdHJ1Y3RvcgorICAgIF0gQ29udGFjdEZpZWxkIHsKKyAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyB0eXBlOworICAgICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZhbHVlOworICAg
ICAgICBhdHRyaWJ1dGUgYm9vbGVhbiBwcmVmOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXkuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXkuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaWVs
ZEFycmF5LmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQ29udGFjdEZpZWxkQXJyYXk6OkNvbnRhY3RGaWVsZEFycmF5KCkKK3sKK30KKworQ29udGFj
dEZpZWxkKiBDb250YWN0RmllbGRBcnJheTo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sK
KyAgICBpZiAoaW5kZXggPj0gbV9maWVsZHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9maWVsZHNbaW5kZXhdLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
b250YWN0cy9Db250YWN0RmllbGRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NvbnRhY3RzL0NvbnRhY3RGaWVsZEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBDb250YWN0RmllbGRBcnJheV9oCisjZGVmaW5lIENvbnRhY3RGaWVsZEFycmF5
X2gKKworI2lmIEVOQUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RGaWVsZC5oIgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0RmllbGRBcnJheSA6IHB1Ymxp
YyBSZWZDb3VudGVkPENvbnRhY3RGaWVsZEFycmF5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29udGFjdEZpZWxkQXJyYXk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENvbnRhY3RGaWVsZEFycmF5KCkpOworICAgIH0KKworICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZmllbGRzLnNpemUoKTsgfQorICAgIENvbnRh
Y3RGaWVsZCogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdm9pZCBzZXQodW5zaWdu
ZWQgaW5kZXgsIFBhc3NSZWZQdHI8Q29udGFjdEZpZWxkPik7CisKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdCB7IHJldHVybiBtX2ZpZWxkcy5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGNsZWFyKCkg
eyBtX2ZpZWxkcy5jbGVhcigpOyB9CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxDb250YWN0
RmllbGQ+IGZpZWxkKSB7IG1fZmllbGRzLmFwcGVuZChmaWVsZCk7IH0KKworcHJpdmF0ZToKKyAg
ICBDb250YWN0RmllbGRBcnJheSgpOworCisgICAgVmVjdG9yPFJlZlB0cjxDb250YWN0RmllbGQ+
ID4gbV9maWVsZHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0RmllbGRBcnJheV9oCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmllbGRBcnJheS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXkuaWRsCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpZWxkQXJyYXkuaWRsCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxlIGNvcmUgeworCisgICAgaW50ZXJmYWNlIFsK
KyAgICAgICAgQ29uZGl0aW9uYWw9Q09OVEFDVFMsCisgICAgICAgIEhhc0luZGV4R2V0dGVyLAor
ICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gQ29udGFjdEZpZWxkQXJyYXkgeworICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CisgICAgICAgIENvbnRh
Y3RGaWVsZCBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICB9Owor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpbmRDYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kQ2FsbGJhY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kQ2Fs
bGJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgQ29udGFjdEZpbmRDYWxs
YmFja19oCisjZGVmaW5lIENvbnRhY3RGaW5kQ2FsbGJhY2tfaAorCisjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJMRShD
T05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0QXJyYXk7CisK
K2NsYXNzIENvbnRhY3RGaW5kQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0Rmlu
ZENhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitwdWJsaWM6CisgICAgQ29udGFj
dEZpbmRDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSA6IEFjdGl2ZURP
TU9iamVjdChjb250ZXh0LCB0aGlzKSB7IH0KKyAgICB2aXJ0dWFsIH5Db250YWN0RmluZENhbGxi
YWNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uc3VjY2VzcyhDb250YWN0QXJyYXkqKSA9IDA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFD
VFMpCisKKyNlbmRpZiAvLyBDb250YWN0RmluZENhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kT3B0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpbmRPcHRpb25zLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIENvbnRhY3RGaW5kT3B0aW9uc19oCisjZGVmaW5lIENvbnRhY3RG
aW5kT3B0aW9uc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2lmIEVOQUJM
RShDT05UQUNUUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0RmluZE9w
dGlvbnMgOiBwdWJsaWMgUmVmQ291bnRlZDxDb250YWN0RmluZE9wdGlvbnM+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0RmluZE9wdGlvbnM+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0RmluZE9wdGlvbnMoKSk7IH0KKworICAgIGNvbnN0IFN0
cmluZyYgZmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXI7IH0KKyAgICB2b2lkIHNldEZp
bHRlcihjb25zdCBTdHJpbmcmIGZpbHRlcikgeyBtX2ZpbHRlciA9IGZpbHRlcjsgfQorICAgIGJv
b2wgaXNNdWx0aXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbXVsdGlwbGU7IH0KKyAgICB2b2lkIHNl
dE11bHRpcGxlKGJvb2wgbXVsdGlwbGUpIHsgbV9tdWx0aXBsZSA9IG11bHRpcGxlOyB9CisKK3By
aXZhdGU6CisgICAgQ29udGFjdEZpbmRPcHRpb25zKCkKKyAgICAgICAgOiBtX211bHRpcGxlKHRy
dWUpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX2ZpbHRlcjsKKyAgICBib29sIG1fbXVs
dGlwbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0RmluZE9wdGlvbnNfaAorCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0RmluZFBlbmRpbmdPcGVyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kUGVuZGluZ09wZXJh
dGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0
RmluZFBlbmRpbmdPcGVyYXRpb24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbi5oIgor
CisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29udGFjdENsaWVudC5oIgorI2lu
Y2x1ZGUgIkNvbnRhY3RGaW5kT3B0aW9ucy5oIgorI2luY2x1ZGUgIkNvbnRhY3RUaHJlYWQuaCIK
KyNpbmNsdWRlICJDb250YWN0VGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbmxpbmUgQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uOjpDb250YWN0Rmlu
ZFBlbmRpbmdPcGVyYXRpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQ29udGFj
dENsaWVudCogY2xpZW50LCBET01TdHJpbmdMaXN0KiBmaWVsZHMsIENvbnRhY3RGaW5kT3B0aW9u
cyogb3B0aW9ucykKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jbGllbnQoY2xp
ZW50KQorICAgICwgbV9maWVsZHMoZmllbGRzKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCit7
Cit9CisKK1Bhc3NSZWZQdHI8Q29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uPiBDb250YWN0Rmlu
ZFBlbmRpbmdPcGVyYXRpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBDb250YWN0Q2xpZW50KiBjbGllbnQsIERPTVN0cmluZ0xpc3QqIGZpZWxkcywgQ29udGFjdEZp
bmRPcHRpb25zKiBvcHRpb25zKQoreworICAgIFJlZlB0cjxDb250YWN0RmluZFBlbmRpbmdPcGVy
YXRpb24+IHByb3h5ID0gYWRvcHRSZWYobmV3IENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbihj
b250ZXh0LCBjbGllbnQsIGZpZWxkcywgb3B0aW9ucykpOworCisgICAgLy8gSG9sZCBhbiByZWYg
c28gdGhhdCB0aGUgaW5zdGFuY2Ugd2lsbCBub3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlcmUgYXJl
IHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICAvLyBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRo
ZSBkZXJlZiBpbiBkZXJlZlByb3h5T25Db250ZXh0IGJlbG93LgorICAgIHByb3h5LT5yZWYoKTsK
KworICAgIHJldHVybiBwcm94eS5yZWxlYXNlKCk7Cit9CisKK0NvbnRhY3RGaW5kUGVuZGluZ09w
ZXJhdGlvbjo6fkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbigpCit7Cit9CisKK0NvbnRhY3RU
aHJlYWQqIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6Y29udGFjdFRocmVhZCgpCit7Cisg
ICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgIEFTU0VSVChtX2Nv
bnRleHQtPmNvbnRhY3RUaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Y29udGFjdFRo
cmVhZCgpOworfQorCit2b2lkIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6c3RhcnQoKQor
eworICAgIGNvbnRhY3RUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlQ29udGFjdFRocmVhZFRhc2so
dGhpcywgJkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbjo6c3RhcnRPbkNvbnRhY3RUaHJlYWQp
KTsKK30KKwordm9pZCBDb250YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OnN0YXJ0T25Db250YWN0
VGhyZWFkKCkKK3sKKyAgICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgY2xp
ZW50KCktPmZpbmQobV9maWVsZHMsIG1fb3B0aW9ucyk7Cit9CisKK3ZvaWQgQ29udGFjdEZpbmRQ
ZW5kaW5nT3BlcmF0aW9uOjpzdG9wKCkKK3sKKyAgICBzZXRDbGllbnQoMCk7CisKKyAgICBjb250
YWN0VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUNvbnRhY3RUaHJlYWRUYXNrKHRoaXMsICZDb250
YWN0RmluZFBlbmRpbmdPcGVyYXRpb246OnN0b3BPbkNvbnRhY3RUaHJlYWQpKTsKK30KKworc3Rh
dGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQ29u
dGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uKiBwcm94eSkKK3sKKyAgICBBU1NFUlQocHJveHktPmhh
c09uZVJlZigpKTsKKyAgICBwcm94eS0+ZGVyZWYoKTsKK30KKwordm9pZCBDb250YWN0RmluZFBl
bmRpbmdPcGVyYXRpb246OnN0b3BPbkNvbnRhY3RUaHJlYWQoKQoreworICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3Rz
L0NvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0aW9uLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RGaW5kUGVuZGluZ09wZXJh
dGlvbl9oCisjZGVmaW5lIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbl9oCisKKyNpZiBFTkFC
TEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlICJDb250YWN0UGVuZGluZ09wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWN0Q2xpZW50OworY2xhc3MgQ29udGFjdFRocmVh
ZDsKK2NsYXNzIENvbnRhY3RGaW5kT3B0aW9uczsKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBDb250YWN0RmluZFBlbmRpbmdPcGVy
YXRpb24gOiBwdWJsaWMgQ29udGFjdFBlbmRpbmdPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBDb250YWN0Q2xpZW50KiwgRE9NU3RyaW5nTGlzdCosIENvbnRh
Y3RGaW5kT3B0aW9ucyopOworICAgIHZpcnR1YWwgfkNvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlv
bigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworCitwcml2YXRlOgor
ICAgIENvbnRhY3RGaW5kUGVuZGluZ09wZXJhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Q29udGFjdENsaWVudCosIERPTVN0cmluZ0xpc3QqLCBDb250YWN0RmluZE9wdGlvbnMqKTsKKwor
ICAgIENvbnRhY3RUaHJlYWQqIGNvbnRhY3RUaHJlYWQoKTsKKworICAgIHZvaWQgc3RhcnRPbkNv
bnRhY3RUaHJlYWQoKTsKKyAgICB2b2lkIHN0b3BPbkNvbnRhY3RUaHJlYWQoKTsKKyAgICBDb250
YWN0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorICAgIHZvaWQgc2V0Q2xp
ZW50KENvbnRhY3RDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OworICAgIENvbnRhY3RDbGllbnQqIG1f
Y2xpZW50OworICAgIERPTVN0cmluZ0xpc3QqIG1fZmllbGRzOworICAgIENvbnRhY3RGaW5kT3B0
aW9ucyogbV9vcHRpb25zOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8gQ29udGFjdEZpbmRQZW5kaW5nT3BlcmF0
aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3ROYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE5hbWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3ROYW1lLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3ROYW1lX2gKKyNkZWZpbmUgQ29udGFjdE5hbWVf
aAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENvbnRhY3ROYW1lIDogcHVibGljIFJlZkNvdW50ZWQ8Q29udGFjdE5hbWU+IHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0TmFtZT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29udGFjdE5hbWUoKSk7CisgICAgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENvbnRhY3ROYW1lPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBmb3JtYXR0
ZWQsIGNvbnN0IFN0cmluZyYgZmFtaWx5TmFtZSwgY29uc3QgU3RyaW5nJiBnaXZlbk5hbWUsIGNv
bnN0IFN0cmluZyYgbWlkZGxlTmFtZSwgY29uc3QgU3RyaW5nJiBob25vcmlmaWNQcmVmaXgsIGNv
bnN0IFN0cmluZyYgaG9ub3JpZmljU3VmZml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb250YWN0TmFtZShmb3JtYXR0ZWQsIGZhbWlseU5hbWUsIGdpdmVuTmFtZSwgbWlk
ZGxlTmFtZSwgaG9ub3JpZmljUHJlZml4LCBob25vcmlmaWNTdWZmaXgpKTsKKyAgICB9CisKKyAg
ICBjb25zdCBTdHJpbmcmIGZvcm1hdHRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGVkOyB9
CisgICAgdm9pZCBzZXRGb3JtYXR0ZWQoY29uc3QgU3RyaW5nJiBmb3JtYXR0ZWQpIHsgbV9mb3Jt
YXR0ZWQgPSBmb3JtYXR0ZWQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2ZhbWlseU5hbWU7IH0KKyAgICB2b2lkIHNldEZhbWlseU5hbWUoY29uc3Qg
U3RyaW5nJiBmYW1pbHlOYW1lKSB7IG1fZmFtaWx5TmFtZSA9IGZhbWlseU5hbWU7IH0KKyAgICBj
b25zdCBTdHJpbmcmIGdpdmVuTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2l2ZW5OYW1lOyB9Cisg
ICAgdm9pZCBzZXRHaXZlbk5hbWUoY29uc3QgU3RyaW5nJiBnaXZlbk5hbWUpIHsgbV9naXZlbk5h
bWUgPSBnaXZlbk5hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcgbWlkZGxlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWlkZGxlTmFtZTsgfQorICAgIHZvaWQgc2V0TWlkZGxlTmFtZShjb25zdCBTdHJp
bmcmIG1pZGRsZU5hbWUpIHsgbV9taWRkbGVOYW1lID0gbWlkZGxlTmFtZTsgfQorICAgIGNvbnN0
IFN0cmluZyYgaG9ub3JpZmljUHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9ob25vcmlmaWNQcmVm
aXg7IH0KKyAgICB2b2lkIHNldEhvbm9yaWZpY1ByZWZpeChjb25zdCBTdHJpbmcmIGhvbm9yaWZp
Y1ByZWZpeCkgeyBtX2hvbm9yaWZpY1ByZWZpeCA9IGhvbm9yaWZpY1ByZWZpeDsgfQorICAgIGNv
bnN0IFN0cmluZyYgaG9ub3JpZmljU3VmZml4KCkgY29uc3QgeyByZXR1cm4gbV9ob25vcmlmaWNT
dWZmaXg7IH0KKyAgICB2b2lkIHNldEhvbm9yaWZpY1N1ZmZpeChjb25zdCBTdHJpbmcmIGhvbm9y
aWZpY1N1ZmZpeCkgeyBtX2hvbm9yaWZpY1ByZWZpeCA9IGhvbm9yaWZpY1N1ZmZpeDsgfQorCitw
cml2YXRlOgorICAgIENvbnRhY3ROYW1lKCkKKyAgICB7CisgICAgfQorICAgIENvbnRhY3ROYW1l
KGNvbnN0IFN0cmluZyYgZm9ybWF0dGVkLCBjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUsIGNvbnN0
IFN0cmluZyYgZ2l2ZW5OYW1lLCBjb25zdCBTdHJpbmcmIG1pZGRsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgaG9ub3JpZmljUHJlZml4LCBjb25zdCBTdHJpbmcmIGhvbm9yaWZpY1N1ZmZpeCkKKyAgICAg
ICAgOiBtX2Zvcm1hdHRlZChmb3JtYXR0ZWQpCisgICAgICAgICwgbV9mYW1pbHlOYW1lKGZhbWls
eU5hbWUpCisgICAgICAgICwgbV9naXZlbk5hbWUoZ2l2ZW5OYW1lKQorICAgICAgICAsIG1fbWlk
ZGxlTmFtZShtaWRkbGVOYW1lKQorICAgICAgICAsIG1faG9ub3JpZmljUHJlZml4KGhvbm9yaWZp
Y1ByZWZpeCkKKyAgICAgICAgLCBtX2hvbm9yaWZpY1N1ZmZpeChob25vcmlmaWNTdWZmaXgpCisg
ICAgeworICAgIH0KKworICAgIFN0cmluZyBtX2Zvcm1hdHRlZDsKKyAgICBTdHJpbmcgbV9mYW1p
bHlOYW1lOworICAgIFN0cmluZyBtX2dpdmVuTmFtZTsKKyAgICBTdHJpbmcgbV9taWRkbGVOYW1l
OworICAgIFN0cmluZyBtX2hvbm9yaWZpY1ByZWZpeDsKKyAgICBTdHJpbmcgbV9ob25vcmlmaWNT
dWZmaXg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0TmFtZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jb250YWN0cy9Db250YWN0TmFtZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGFjdHMvQ29udGFjdE5hbWUuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
Y29udGFjdHMvQ29udGFjdE5hbWUuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworbW9kdWxl
IGNvcmUgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9Q09OVEFDVFMs
IAorICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICBdIENvbnRhY3ROYW1lIHsKKyAgICAgICAg
YXR0cmlidXRlIERPTVN0cmluZyBmb3JtYXR0ZWQ7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJp
bmcgZmFtaWx5TmFtZTsKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBnaXZlbk5hbWU7Cisg
ICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbWlkZGxlTmFtZTsKKyAgICAgICAgYXR0cmlidXRl
IERPTVN0cmluZyBob25vcmlmaWNQcmVmaXg7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcg
aG9ub3JpZmljU3VmZml4OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0
cy9Db250YWN0T3JnYW5pemF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29u
dGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBDb250YWN0T3JnYW5pemF0aW9uX2gKKyNkZWZpbmUgQ29udGFjdE9yZ2FuaXph
dGlvbl9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ29udGFjdE9yZ2FuaXphdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPENvbnRhY3RP
cmdhbml6YXRpb24+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0T3Jn
YW5pemF0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
b250YWN0T3JnYW5pemF0aW9uKCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250
YWN0T3JnYW5pemF0aW9uPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGRlcGFydG1lbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvbnRhY3RPcmdhbml6YXRpb24obmFtZSwgZGVwYXJ0bWVudCwgdGl0bGUp
KTsKKyAgICB9CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKSB7IG1fbmFtZSA9IG5h
bWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRlcGFydG1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Rl
cGFydG1lbnQ7IH0KKyAgICB2b2lkIHNldERlcGFydG1lbnQoY29uc3QgU3RyaW5nJiBkZXBhcnRt
ZW50KSB7IG1fZGVwYXJ0bWVudCA9IGRlcGFydG1lbnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRp
dGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJiB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KKworcHJpdmF0ZToKKyAgICBDb250
YWN0T3JnYW5pemF0aW9uKCkgeyB9CisgICAgQ29udGFjdE9yZ2FuaXphdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVwYXJ0bWVudCwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
KyAgICAgICAgOiBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX2RlcGFydG1lbnQoZGVwYXJ0bWVu
dCkKKyAgICAgICAgLCBtX3RpdGxlKHRpdGxlKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcg
bV9uYW1lOworICAgIFN0cmluZyBtX2RlcGFydG1lbnQ7CisgICAgU3RyaW5nIG1fdGl0bGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMp
CisKKyNlbmRpZiAvLyBDb250YWN0T3JnYW5pemF0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb24uaWRsCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbi5pZGwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCittb2R1bGUgY29yZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1DT05UQUNUUywgCisgICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgIF0g
Q29udGFjdE9yZ2FuaXphdGlvbiB7CisgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsK
KyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBkZXBhcnRtZW50OworICAgICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIHRpdGxlOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250
YWN0cy9Db250YWN0T3JnYW5pemF0aW9uQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb25BcnJheS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0T3JnYW5pemF0aW9uQXJyYXkuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNvbnRhY3RPcmdhbml6YXRpb25BcnJheS5oIgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRhY3RPcmdhbml6YXRpb25BcnJheTo6Q29udGFjdE9y
Z2FuaXphdGlvbkFycmF5KCkKK3sKK30KKworQ29udGFjdE9yZ2FuaXphdGlvbiogQ29udGFjdE9y
Z2FuaXphdGlvbkFycmF5OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmIChp
bmRleCA+PSBtX29yZ2FuaXphdGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gbV9vcmdhbml6YXRpb25zW2luZGV4XS5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UK
KworI2VuZGlmIC8vIEVOQUJMRShDT05UQUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRh
Y3RzL0NvbnRhY3RPcmdhbml6YXRpb25BcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NvbnRhY3RzL0NvbnRhY3RPcmdhbml6YXRpb25BcnJheS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1
bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIENvbnRhY3RPcmdhbml6YXRpb25BcnJheV9oCisj
ZGVmaW5lIENvbnRhY3RPcmdhbml6YXRpb25BcnJheV9oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMp
CisKKyNpbmNsdWRlICJDb250YWN0T3JnYW5pemF0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENvbnRhY3RPcmdhbml6YXRpb25BcnJheSA6IHB1YmxpYyBSZWZDb3VudGVk
PENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvbnRhY3RPcmdhbml6YXRpb25BcnJheT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5KCkpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JnYW5pemF0aW9ucy5zaXpl
KCk7IH0KKyAgICBDb250YWN0T3JnYW5pemF0aW9uKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dDsKKyAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxDb250YWN0T3JnYW5p
emF0aW9uPik7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX29yZ2FuaXph
dGlvbnMuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhcigpIHsgbV9vcmdhbml6YXRpb25zLmNs
ZWFyKCk7IH0KKyAgICB2b2lkIGFwcGVuZChQYXNzUmVmUHRyPENvbnRhY3RPcmdhbml6YXRpb24+
IG9yZ2FuaXphdGlvbikgeyBtX29yZ2FuaXphdGlvbnMuYXBwZW5kKG9yZ2FuaXphdGlvbik7IH0K
KworcHJpdmF0ZToKKyAgICBDb250YWN0T3JnYW5pemF0aW9uQXJyYXkoKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8Q29udGFjdE9yZ2FuaXphdGlvbj4gPiBtX29yZ2FuaXphdGlvbnM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNl
bmRpZiAvLyBDb250YWN0T3JnYW5pemF0aW9uQXJyYXlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
Y29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0T3JnYW5pemF0aW9uQXJyYXkuaWRsCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdE9yZ2FuaXphdGlvbkFycmF5
LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUNPTlRBQ1RTLAorICAgICAgICBIYXNJbmRleEdl
dHRlciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIENvbnRhY3RPcmdhbml6YXRpb25B
cnJheSB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsK
KyAgICAgICAgQ29udGFjdE9yZ2FuaXphdGlvbiBpdGVtKGluIFtJc0luZGV4XSB1bnNpZ25lZCBs
b25nIGluZGV4KTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29u
dGFjdFBlbmRpbmdPcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
YWN0cy9Db250YWN0UGVuZGluZ09wZXJhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvY29udGFjdHMvQ29udGFjdFBlbmRpbmdPcGVyYXRpb24uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgQ29udGFjdFBlbmRpbmdPcGVyYXRpb25faAorI2RlZmluZSBDb250
YWN0UGVuZGluZ09wZXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRh
Y3RQZW5kaW5nT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q29udGFjdFBlbmRpbmdPcGVy
YXRpb24+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHN0b3AoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0UGVuZGluZ09wZXJh
dGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RUaHJlYWQuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShDT05UQUNUUykKKworI2luY2x1ZGUgIkNvbnRhY3RUaHJlYWQuaCIKKworI2luY2x1ZGUg
IkF1dG9kcmFpbmVkUG9vbC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitDb250YWN0VGhyZWFkOjpDb250YWN0VGhyZWFkKCkKKyAgICA6IG1fdGhyZWFk
SUQoMCkKK3sKKyAgICBtX3NlbGZSZWYgPSB0aGlzOworfQorCitDb250YWN0VGhyZWFkOjp+Q29u
dGFjdFRocmVhZCgpCit7CisgICAgQVNTRVJUKG1fcXVldWUua2lsbGVkKCkpOworfQorCitib29s
IENvbnRhY3RUaHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fdGhyZWFk
Q3JlYXRpb25NdXRleCk7CisgICAgaWYgKG1fdGhyZWFkSUQpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoQ29udGFjdFRocmVhZDo6Y29udGFjdFRo
cmVhZFN0YXJ0LCB0aGlzLCAiV2ViQ29yZTogQ29udGFjdCIpOworICAgIHJldHVybiBtX3RocmVh
ZElEOworfQorCit2b2lkIENvbnRhY3RUaHJlYWQ6OnN0b3AoKQoreworICAgIG1fcXVldWUua2ls
bCgpOworfQorCit2b2lkIENvbnRhY3RUaHJlYWQ6OnBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4g
dGFzaykKK3sKKyAgICBtX3F1ZXVlLmFwcGVuZCh0YXNrKTsKK30KKworY2xhc3MgU2FtZUluc3Rh
bmNlUHJlZGljYXRlIHsKK3B1YmxpYzoKKyAgICBTYW1lSW5zdGFuY2VQcmVkaWNhdGUoY29uc3Qg
dm9pZCogaW5zdGFuY2UpIDogbV9pbnN0YW5jZShpbnN0YW5jZSkgeyB9CisgICAgYm9vbCBvcGVy
YXRvcigpKENvbnRhY3RUaHJlYWQ6OlRhc2sqIHRhc2spIGNvbnN0IHsgcmV0dXJuIHRhc2stPmlu
c3RhbmNlKCkgPT0gbV9pbnN0YW5jZTsgfQorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2lu
c3RhbmNlOworfTsKKwordm9pZCBDb250YWN0VGhyZWFkOjp1bnNjaGVkdWxlVGFza3MoY29uc3Qg
dm9pZCogaW5zdGFuY2UpCit7CisgICAgU2FtZUluc3RhbmNlUHJlZGljYXRlIHByZWRpY2F0ZShp
bnN0YW5jZSk7CisgICAgbV9xdWV1ZS5yZW1vdmVJZihwcmVkaWNhdGUpOworfQorCit2b2lkKiBD
b250YWN0VGhyZWFkOjpjb250YWN0VGhyZWFkU3RhcnQodm9pZCogYXJnKQoreworICAgIENvbnRh
Y3RUaHJlYWQqIGNvbnRhY3RUaHJlYWQgPSBzdGF0aWNfY2FzdDxDb250YWN0VGhyZWFkKj4oYXJn
KTsKKyAgICByZXR1cm4gY29udGFjdFRocmVhZC0+cnVuTG9vcCgpOworfQorCit2b2lkKiBDb250
YWN0VGhyZWFkOjpydW5Mb29wKCkKK3sKKyAgICB7CisgICAgICAgIC8vIFdhaXQgZm9yIENvbnRh
Y3RUaHJlYWQ6OnN0YXJ0KCkgdG8gY29tcGxldGUgdG8gaGF2ZSBtX3RocmVhZElECisgICAgICAg
IC8vIGVzdGFibGlzaGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbWFpbiBsb29wLgorICAgICAgICBN
dXRleExvY2tlciBsb2NrKG1fdGhyZWFkQ3JlYXRpb25NdXRleCk7CisgICAgfQorCisgICAgQXV0
b2RyYWluZWRQb29sIHBvb2w7CisgICAgd2hpbGUgKE93blB0cjxUYXNrPiB0YXNrID0gbV9xdWV1
ZS53YWl0Rm9yTWVzc2FnZSgpKSB7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKCk7CisgICAg
ICAgIHBvb2wuY3ljbGUoKTsKKyAgICB9CisKKyAgICBkZXRhY2hUaHJlYWQobV90aHJlYWRJRCk7
CisKKyAgICAvLyBDbGVhciB0aGUgc2VsZiByZWZwdHIsIHBvc3NpYmx5IHJlc3VsdGluZyBpbiBk
ZWxldGlvbgorICAgIG1fc2VsZlJlZiA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1QpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFRocmVhZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvY29udGFjdHMvQ29udGFjdFRocmVhZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2lmbmRlZiBDb250YWN0VGhyZWFkX2gKKyNkZWZpbmUgQ29udGFjdFRocmVhZF9oCisKKyNp
ZiBFTkFCTEUoQ09OVEFDVFMpCisKKyNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b250YWN0VGhyZWFkIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvbnRhY3RUaHJlYWQ+
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0VGhyZWFkPiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb250YWN0VGhyZWFkKCkpOwor
ICAgIH0KKworICAgIH5Db250YWN0VGhyZWFkKCk7CisKKyAgICBib29sIHN0YXJ0KCk7CisgICAg
dm9pZCBzdG9wKCk7CisKKyAgICBjbGFzcyBUYXNrIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVGFzayk7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpID0gMDsKKyAgICAgICAgdm9pZCogaW5z
dGFuY2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CisgICAgcHJvdGVjdGVkOgorICAg
ICAgICBUYXNrKHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQorICAg
ICAgICB2b2lkKiBtX2luc3RhbmNlOworICAgIH07CisKKyAgICB2b2lkIHBvc3RUYXNrKFBhc3NP
d25QdHI8VGFzaz4pOworCisgICAgdm9pZCB1bnNjaGVkdWxlVGFza3MoY29uc3Qgdm9pZCogaW5z
dGFuY2UpOworCitwcml2YXRlOgorICAgIENvbnRhY3RUaHJlYWQoKTsKKworICAgIHN0YXRpYyB2
b2lkKiBjb250YWN0VGhyZWFkU3RhcnQodm9pZCopOworICAgIHZvaWQqIHJ1bkxvb3AoKTsKKwor
ICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKKyAgICBSZWZQdHI8Q29udGFjdFRocmVh
ZD4gbV9zZWxmUmVmOworICAgIE1lc3NhZ2VRdWV1ZTxUYXNrPiBtX3F1ZXVlOworCisgICAgTXV0
ZXggbV90aHJlYWRDcmVhdGlvbk11dGV4OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8gQ29udGFjdFRocmVhZF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkVGFzay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RUaHJlYWRUYXNrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9jb250YWN0cy9Db250YWN0VGhyZWFkVGFzay5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0VGhyZWFkVGFza19oCisj
ZGVmaW5lIENvbnRhY3RUaHJlYWRUYXNrX2gKKworI2luY2x1ZGUgIkNvbnRhY3RUaHJlYWQuaCIK
KyNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgorI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgQ29udGFjdFRocmVhZFRhc2swIDogcHVibGljIENvbnRhY3RUaHJlYWQ6OlRhc2sgeworcHVi
bGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoKTsKKyAgICB0eXBlZGVmIENvbnRh
Y3RUaHJlYWRUYXNrMDxUPiBDb250YWN0VGhyZWFkVGFza0ltcGw7CisKKyAgICBzdGF0aWMgUGFz
c093blB0cjxDb250YWN0VGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9k
IG1ldGhvZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ29udGFjdFRocmVh
ZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ29u
dGFjdFRocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kKQorICAgICAgICA6IENv
bnRhY3RUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQor
ICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAg
ICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKSgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorUGFzc093blB0cjxDb250YWN0VGhyZWFkOjpUYXNrPiBjcmVhdGVDb250YWN0VGhyZWFk
VGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoKSkKK3sK
KyAgICByZXR1cm4gQ29udGFjdFRocmVhZFRhc2swPFQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxl
ZSwKKyAgICAgICAgbWV0aG9kKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gQ29udGFjdFRocmVhZFRhc2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMv
Q29udGFjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRh
Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3Rz
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb250YWN0cy5oIgorCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29u
dGFjdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDb250YWN0RXJyb3JDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkNvbnRhY3RGaW5kQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJDb250YWN0RmluZE9wdGlv
bnMuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRhY3RzOjpDb250YWN0cyhGcmFtZSogZnJhbWUpCisg
ICAgOiBtX2ZyYW1lKGZyYW1lKQoreworfQorCit2b2lkIENvbnRhY3RzOjpkaXNjb25uZWN0RnJh
bWUoKQoreworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgbV9m
cmFtZS0+cGFnZSgpLT5jb250YWN0Q29udHJvbGxlcigpLT5jYW5jZWxQZXJtaXNzaW9uUmVxdWVz
dCgpOworICAgIG1fZnJhbWUgPSAwOworfQorCit2b2lkIENvbnRhY3RzOjpmaW5kKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gZmllbGRz
LCBQYXNzUmVmUHRyPENvbnRhY3RGaW5kQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1Jl
ZlB0cjxDb250YWN0RXJyb3JDYWxsYmFjaz5lcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPENvbnRh
Y3RGaW5kT3B0aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5w
YWdlKCkpCisgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Y29udGFjdENvbnRyb2xsZXIoKS0+Zmlu
ZChjb250ZXh0LCBmaWVsZHMsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9u
cyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDT05U
QUNUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIENvbnRhY3RzX2gKKyNkZWZpbmUgQ29udGFjdHNfaAorCisjaWYgRU5BQkxF
KENPTlRBQ1RTKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xh
c3MgRE9NU3RyaW5nTGlzdDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBD
b250YWN0RmluZENhbGxiYWNrOworY2xhc3MgQ29udGFjdEVycm9yQ2FsbGJhY2s7CitjbGFzcyBD
b250YWN0RmluZE9wdGlvbnM7CisKK2NsYXNzIENvbnRhY3RzIDogcHVibGljIFJlZkNvdW50ZWQ8
Q29udGFjdHM+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb250YWN0cz4gY3Jl
YXRlKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29u
dGFjdHMoZnJhbWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIFBhc3NSZWZQdHI8Q29udGFjdEZpbmRD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8Q29udGFjdEVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPENv
bnRhY3RGaW5kT3B0aW9ucz4pOworCisgICAgRnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZTsgfQorICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CisKK3ByaXZhdGU6CisgICAg
Q29udGFjdHMoRnJhbWUqKTsKKworICAgIEZyYW1lKiBtX2ZyYW1lOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENPTlRBQ1RTKQorCisjZW5kaWYgLy8g
Q29udGFjdHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvY29udGFjdHMvQ29udGFjdHMuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmlkbAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRhY3RzL0NvbnRhY3RzLmlkbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBF
bGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKK21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAg
IENvbmRpdGlvbmFsPUNPTlRBQ1RTLAorICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICBdIENv
bnRhY3RzIHsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBmaW5kKGluIERPTVN0cmluZ0xpc3QgZmll
bGRzLCBpbiBDb250YWN0RmluZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywgaW4gQ29udGFjdEVy
cm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gQ29udGFjdEZpbmRPcHRpb25zIG9wdGlvbnMp
OworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwCShyZXZpc2lvbiA4OTk4NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsMTAgQEAK
ICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMp
CisjaW5jbHVkZSAiQ29udGFjdFRocmVhZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgUHJvY2Vzc01lc3NhZ2VzU29vblRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzayB7CkBAIC0xMjMsNiArMTI3LDEzIEBAIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6On5TY3JpcHRFeGVjdXRpb24KICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDT05U
QUNUUykKKyAgICBpZiAobV9jb250YWN0VGhyZWFkKSB7CisgICAgICAgIG1fY29udGFjdFRocmVh
ZC0+c3RvcCgpOworICAgICAgICBtX2NvbnRhY3RUaHJlYWQgPSAwOworICAgIH0KKyNlbmRpZgor
CiAjaWYgRU5BQkxFKEJMT0IpCiAgICAgSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBwdWJsaWNC
bG9iVVJMc0VuZCA9IG1fcHVibGljQmxvYlVSTHMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFN0
cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3B1YmxpY0Jsb2JVUkxzLmJlZ2luKCk7IGl0ZXIgIT0g
cHVibGljQmxvYlVSTHNFbmQ7ICsraXRlcikKQEAgLTQxMCw2ICs0MjEsMTggQEAgRmlsZVRocmVh
ZCogU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6ZmlsZQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
Q09OVEFDVFMpCitDb250YWN0VGhyZWFkKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpjb250YWN0
VGhyZWFkKCkKK3sKKyAgICBpZiAoIW1fY29udGFjdFRocmVhZCkgeworICAgICAgICBtX2NvbnRh
Y3RUaHJlYWQgPSBDb250YWN0VGhyZWFkOjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRh
Y3RUaHJlYWQtPnN0YXJ0KCkpCisgICAgICAgICAgICBtX2NvbnRhY3RUaHJlYWQgPSAwOworICAg
IH0KKyAgICByZXR1cm4gbV9jb250YWN0VGhyZWFkLmdldCgpOworfQorI2VuZGlmCisKIHZvaWQg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6YWRqdXN0TWluaW11bVRpbWVySW50ZXJ2YWwoZG91Ymxl
IG9sZE1pbmltdW1UaW1lckludGVydmFsKQogewogICAgIGlmIChtaW5pbXVtVGltZXJJbnRlcnZh
bCgpICE9IG9sZE1pbmltdW1UaW1lckludGVydmFsKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDg5OTg2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNiArNjYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEZpbGVUaHJlYWQ7
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBjbGFzcyBDb250YWN0VGhyZWFk
OworI2VuZGlmCisKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKICAgICBwdWJs
aWM6CiAgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKQEAgLTE1Nyw2ICsxNjEsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHN0b3BGaWxlVGhyZWFkKCk7CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICAgICAgQ29udGFjdFRocmVhZCogY29u
dGFjdFRocmVhZCgpOworI2VuZGlmCisKICAgICAgICAgLy8gSW50ZXJ2YWwgaXMgaW4gc2Vjb25k
cy4KICAgICAgICAgdm9pZCBhZGp1c3RNaW5pbXVtVGltZXJJbnRlcnZhbChkb3VibGUgb2xkTWlu
aW11bVRpbWVySW50ZXJ2YWwpOwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtVGltZXJJ
bnRlcnZhbCgpIGNvbnN0OwpAQCAtMjA4LDYgKzIxNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKICAgICAgICAgUmVmUHRy
PEZpbGVUaHJlYWQ+IG1fZmlsZVRocmVhZDsKICNlbmRpZgorCisjaWYgRU5BQkxFKENPTlRBQ1RT
KQorICAgICAgICBSZWZQdHI8Q29udGFjdFRocmVhZD4gbV9jb250YWN0VGhyZWFkOworI2VuZGlm
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAkocmV2aXNpb24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmln
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKKyNpZiBFTkFCTEUo
Q09OVEFDVFMpCisjaW5jbHVkZSAiQ29udGFjdHMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIE5hdmlnYXRvcjo6TmF2aWdhdG9yKEZyYW1lKiBmcmFtZSkKQEAgLTc5LDYgKzgz
LDEyIEBAIHZvaWQgTmF2aWdhdG9yOjpkaXNjb25uZWN0RnJhbWUoKQogICAgICAgICBtX2dlb2xv
Y2F0aW9uLT5kaXNjb25uZWN0RnJhbWUoKTsKICAgICAgICAgbV9nZW9sb2NhdGlvbiA9IDA7CiAg
ICAgfQorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBpZiAobV9jb250YWN0cykgeworICAgICAg
ICBtX2NvbnRhY3RzLT5kaXNjb25uZWN0RnJhbWUoKTsKKyAgICAgICAgbV9jb250YWN0cyA9IDA7
CisgICAgfQorI2VuZGlmCiAgICAgbV9mcmFtZSA9IDA7CiB9CiAKQEAgLTE2Nyw2ICsxNzcsMTUg
QEAgR2VvbG9jYXRpb24qIE5hdmlnYXRvcjo6Z2VvbG9jYXRpb24oKSBjbwogICAgIHJldHVybiBt
X2dlb2xvY2F0aW9uLmdldCgpOwogfQogCisjaWYgRU5BQkxFKENPTlRBQ1RTKQorQ29udGFjdHMq
IE5hdmlnYXRvcjo6Y29udGFjdHMoKSBjb25zdAoreworICAgIGlmICghbV9jb250YWN0cykKKyAg
ICAgICAgbV9jb250YWN0cyA9IENvbnRhY3RzOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJu
IG1fY29udGFjdHMuZ2V0KCk7Cit9CisjZW5kaWYKKwogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
IHZvaWQgTmF2aWdhdG9yOjpnZXRTdG9yYWdlVXBkYXRlcygpCiB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
TmF2aWdhdG9yLmgJKHJldmlzaW9uIDg5OTg2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAgY2xhc3MgTmF2aWdhdG9y
VXNlck1lZGlhRXJyb3JDYWxsYmFjazsKIGNsYXNzIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3ND
YWxsYmFjazsKIGNsYXNzIFBsdWdpbkRhdGE7CiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCitjbGFz
cyBDb250YWN0czsKKyNlbmRpZgorCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFz
cyBOYXZpZ2F0b3IgOiBwdWJsaWMgTmF2aWdhdG9yQmFzZSwgcHVibGljIFJlZkNvdW50ZWQ8TmF2
aWdhdG9yPiB7CkBAIC01OCw2ICs2MiwxMCBAQCBwdWJsaWM6CiAKICAgICBHZW9sb2NhdGlvbiog
Z2VvbG9jYXRpb24oKSBjb25zdDsKIAorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICBDb250YWN0
cyogY29udGFjdHMoKSBjb25zdDsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
ICAgIC8vIFJlbGlucXVpc2hlcyB0aGUgc3RvcmFnZSBsb2NrLCBpZiBvbmUgZXhpc3RzLgogICAg
IHZvaWQgZ2V0U3RvcmFnZVVwZGF0ZXMoKTsKQEAgLTc3LDYgKzg1LDEwIEBAIHByaXZhdGU6CiAg
ICAgbXV0YWJsZSBSZWZQdHI8RE9NUGx1Z2luQXJyYXk+IG1fcGx1Z2luczsKICAgICBtdXRhYmxl
IFJlZlB0cjxET01NaW1lVHlwZUFycmF5PiBtX21pbWVUeXBlczsKICAgICBtdXRhYmxlIFJlZlB0
cjxHZW9sb2NhdGlvbj4gbV9nZW9sb2NhdGlvbjsKKworI2lmIEVOQUJMRShDT05UQUNUUykKKyAg
ICBtdXRhYmxlIFJlZlB0cjxDb250YWN0cz4gbV9jb250YWN0czsKKyNlbmRpZgogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmlkbAkocmV2aXNpb24gODk5ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0VuYWJs
ZWRBdFJ1bnRpbWVdIEdlb2xvY2F0aW9uIGdlb2xvY2F0aW9uOwogI2VuZGlmCiAKKyNpZiBkZWZp
bmVkKEVOQUJMRV9DT05UQUNUUykgJiYgRU5BQkxFX0NPTlRBQ1RTCisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBDb250YWN0cyBjb250YWN0czsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChFTkFC
TEVfRE9NX1NUT1JBR0UpICYmIEVOQUJMRV9ET01fU1RPUkFHRQogICAgICAgICB2b2lkIGdldFN0
b3JhZ2VVcGRhdGVzKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24g
ODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisjaW5jbHVkZSAiQ29udGFjdENvbnRyb2xsZXIu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PFBhZ2Uq
PiogYWxsUGFnZXM7CkBAIC0xMzksNiArMTQzLDkgQEAgUGFnZTo6UGFnZShQYWdlQ2xpZW50cyYg
cGFnZUNsaWVudHMpCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAsIG1fc3BlZWNoSW5w
dXRDbGllbnQocGFnZUNsaWVudHMuc3BlZWNoSW5wdXRDbGllbnQpCiAjZW5kaWYKKyNpZiBFTkFC
TEUoQ09OVEFDVFMpCisgICAgLCBtX2NvbnRhY3RDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBDb250
YWN0Q29udHJvbGxlcih0aGlzLCBwYWdlQ2xpZW50cy5jb250YWN0Q2xpZW50KSkpCisjZW5kaWYK
ICAgICAsIG1fc2V0dGluZ3MoYWRvcHRQdHIobmV3IFNldHRpbmdzKHRoaXMpKSkKICAgICAsIG1f
cHJvZ3Jlc3MoYWRvcHRQdHIobmV3IFByb2dyZXNzVHJhY2tlcikpCiAgICAgLCBtX2JhY2tGb3J3
YXJkQ29udHJvbGxlcihhZG9wdFB0cihuZXcgQmFja0ZvcndhcmRDb250cm9sbGVyKHRoaXMsIHBh
Z2VDbGllbnRzLmJhY2tGb3J3YXJkQ2xpZW50KSkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNp
b24gODk5ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtOTAsNiArOTAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQogICAgIGNsYXNzIE5vdGlmaWNhdGlvblByZXNlbnRlcjsKICNlbmRpZgorI2lmIEVO
QUJMRShDT05UQUNUUykKKyAgICBjbGFzcyBDb250YWN0Q2xpZW50OworICAgIGNsYXNzIENvbnRh
Y3RDb250cm9sbGVyOworI2VuZGlmCiAKICAgICB0eXBlZGVmIHVpbnQ2NF90IExpbmtIYXNoOwog
CkBAIC0xMjAsNiArMTI0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgUmVm
UHRyPEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRDbGllbnQ7CiAgICAgICAgICAgICBTcGVl
Y2hJbnB1dENsaWVudCogc3BlZWNoSW5wdXRDbGllbnQ7CiAgICAgICAgICAgICBNZWRpYVN0cmVh
bUNsaWVudCogbWVkaWFTdHJlYW1DbGllbnQ7CisjaWYgRU5BQkxFKENPTlRBQ1RTKQorICAgICAg
ICAgICAgQ29udGFjdENsaWVudCogY29udGFjdENsaWVudDsKKyNlbmRpZgogICAgICAgICB9Owog
CiAgICAgICAgIFBhZ2UoUGFnZUNsaWVudHMmKTsKQEAgLTE5MSw2ICsxOTgsOSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAgICAgU3BlZWNoSW5w
dXQqIHNwZWVjaElucHV0KCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCisgICAgICAg
IENvbnRhY3RDb250cm9sbGVyKiBjb250YWN0Q29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGFjdENvbnRyb2xsZXIuZ2V0KCk7IH0KKyNlbmRpZgogICAgICAgICBTZXR0aW5ncyogc2V0
dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgICAgIFByb2dy
ZXNzVHJhY2tlciogcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzLmdldCgpOyB9
CiAgICAgICAgIEJhY2tGb3J3YXJkQ29udHJvbGxlciogYmFja0ZvcndhcmQoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tGb3J3YXJkQ29udHJvbGxlci5nZXQoKTsgfQpAQCAtMzUyLDYgKzM2Miw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3BlZWNoSW5wdXRDbGllbnQqIG1fc3BlZWNo
SW5wdXRDbGllbnQ7CiAgICAgICAgIE93blB0cjxTcGVlY2hJbnB1dD4gbV9zcGVlY2hJbnB1dDsK
ICNlbmRpZgorI2lmIEVOQUJMRShDT05UQUNUUykKKyAgICAgICAgT3duUHRyPENvbnRhY3RDb250
cm9sbGVyPiBtX2NvbnRhY3RDb250cm9sbGVyOworI2VuZGlmCiAgICAgICAgIE93blB0cjxTZXR0
aW5ncz4gbV9zZXR0aW5nczsKICAgICAgICAgT3duUHRyPFByb2dyZXNzVHJhY2tlcj4gbV9wcm9n
cmVzczsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250YWN0Q2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGFjdENsaWVu
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGFjdENsaWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBDb250YWN0Q2xpZW50X2gKKyNk
ZWZpbmUgQ29udGFjdENsaWVudF9oCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMpCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIERPTVN0cmluZ0xpc3Q7CitjbGFzcyBDb250YWN0RmluZE9wdGlv
bnM7CisKK2NsYXNzIENvbnRhY3RDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNvbnRh
Y3RDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5kKERPTVN0cmluZ0xpc3QqLCBD
b250YWN0RmluZE9wdGlvbnMqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKSA9IDA7Cit9OworCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZiAvLyBDb250YWN0Q2xpZW50X2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQ29udGFjdENsaWVudE1vY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQ29udGFjdENsaWVudE1vY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Db250YWN0Q2xp
ZW50TW9jay5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNvbnRhY3RDbGllbnRNb2NrLmgiCisKKyNpZiBFTkFCTEUoQ09OVEFDVFMp
CisKKyNpbmNsdWRlICJDb250YWN0QXJyYXkuaCIKKyNpbmNsdWRlICJDb250YWN0Q29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkNvbnRhY3RFcnJvci5oIgorI2luY2x1ZGUgIkNvbnRhY3RGaW5kT3B0
aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbnRhY3RDbGllbnRNb2NrOjpDb250
YWN0Q2xpZW50TW9jaygpCisgICAgOiBtX2NvbnRyb2xsZXIoMCkKKyAgICAsIG1fcGVybWlzc2lv
blN0YXRlKFBlcm1pc3Npb25TdGF0ZVVuc2V0KQoreworfQorCitDb250YWN0Q2xpZW50TW9jazo6
fkNvbnRhY3RDbGllbnRNb2NrKCkKK3sKK30KKwordm9pZCBDb250YWN0Q2xpZW50TW9jazo6dXBk
YXRlUGVybWlzc2lvbigpCit7CisgICAgQVNTRVJUKG1fcGVybWlzc2lvblN0YXRlICE9IFBlcm1p
c3Npb25TdGF0ZVVuc2V0KTsKKyAgICBib29sIGFsbG93ZWQgPSBtX3Blcm1pc3Npb25TdGF0ZSA9
PSBQZXJtaXNzaW9uU3RhdGVBbGxvd2VkOworICAgIG1fY29udHJvbGxlci0+c2V0QWxsb3dlZChh
bGxvd2VkKTsKK30KKwordm9pZCBDb250YWN0Q2xpZW50TW9jazo6dXBkYXRlQ29udHJvbGxlcigp
Cit7CisgICAgQVNTRVJUKG1fY29udHJvbGxlcik7CisKKyAgICBpZiAobV9jb250YWN0cykKKyAg
ICAgICAgbV9jb250cm9sbGVyLT5jb250YWN0RmluZGVkKG1fY29udGFjdHMuZ2V0KCkpOworICAg
IGVsc2UgaWYgKG1fZXJyb3IpCisgICAgICAgIG1fY29udHJvbGxlci0+ZXJyb3JPY2N1cnJlZCht
X2Vycm9yLmdldCgpKTsKK30KKwordm9pZCBDb250YWN0Q2xpZW50TW9jazo6c2V0Q29udHJvbGxl
cihDb250YWN0Q29udHJvbGxlciAqY29udHJvbGxlcikKK3sKKyAgICBBU1NFUlQoY29udHJvbGxl
ciAmJiAhbV9jb250cm9sbGVyKTsKKyAgICBtX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyOworfQor
Cit2b2lkIENvbnRhY3RDbGllbnRNb2NrOjpzZXRDb250YWN0cyhQYXNzUmVmUHRyPENvbnRhY3RB
cnJheT4gY29udGFjdHMpCit7CisgICAgbV9jb250YWN0cyA9IGNvbnRhY3RzOworICAgIG1fZXJy
b3IgPSAwOworICAgIHVwZGF0ZUNvbnRyb2xsZXIoKTsKK30KKwordm9pZCBDb250YWN0Q2xpZW50
TW9jazo6c2V0RXJyb3IoUGFzc1JlZlB0cjxDb250YWN0RXJyb3I+IGVycm9yKQoreworICAgIG1f
ZXJyb3IgPSBlcnJvcjsKKyAgICBtX2NvbnRhY3RzID0gMDsKKyAgICB1cGRhdGVDb250cm9sbGVy
KCk7Cit9CisKK3ZvaWQgQ29udGFjdENsaWVudE1vY2s6OnNldFBlcm1pc3Npb24oYm9vbCBhbGxv
d2VkKQoreworICAgIG1fcGVybWlzc2lvblN0YXRlID0gYWxsb3dlZCA/IFBlcm1pc3Npb25TdGF0
ZUFsbG93ZWQgOiBQZXJtaXNzaW9uU3RhdGVEZW5pZWQ7CisgICAgdXBkYXRlUGVybWlzc2lvbigp
OworfQorCit2b2lkIENvbnRhY3RDbGllbnRNb2NrOjpyZXF1ZXN0UGVybWlzc2lvbigpCit7Cisg
ICAgaWYgKG1fcGVybWlzc2lvblN0YXRlICE9IFBlcm1pc3Npb25TdGF0ZVVuc2V0KQorICAgICAg
ICB1cGRhdGVQZXJtaXNzaW9uKCk7Cit9CisKK3ZvaWQgQ29udGFjdENsaWVudE1vY2s6OmNhbmNl
bFBlcm1pc3Npb25SZXF1ZXN0KCkKK3sKK30KKwordm9pZCBDb250YWN0Q2xpZW50TW9jazo6cmVz
ZXQoKQoreworICAgIG1fY29udGFjdHMgPSAwOworICAgIG1fZXJyb3IgPSAwOworICAgIG1fcGVy
bWlzc2lvblN0YXRlID0gUGVybWlzc2lvblN0YXRlVW5zZXQ7Cit9CisKK3ZvaWQgQ29udGFjdENs
aWVudE1vY2s6OmZpbmQoRE9NU3RyaW5nTGlzdCosIENvbnRhY3RGaW5kT3B0aW9ucyopCit7Cisg
ICAgdXBkYXRlQ29udHJvbGxlcigpOworfQorCit2b2lkIENvbnRhY3RDbGllbnRNb2NrOjpjYW5j
ZWwoKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q09OVEFDVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svQ29udGFjdENsaWVu
dE1vY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0NvbnRh
Y3RDbGllbnRNb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL0NvbnRhY3RDbGllbnRNb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVm
IENvbnRhY3RDbGllbnRNb2NrX2gKKyNkZWZpbmUgQ29udGFjdENsaWVudE1vY2tfaAorCisjaWYg
RU5BQkxFKENPTlRBQ1RTKQorCisjaW5jbHVkZSAiQ29udGFjdENsaWVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFjdEFy
cmF5OworY2xhc3MgQ29udGFjdEVycm9yOworY2xhc3MgQ29udGFjdEZpbmRPcHRpb25zOworY2xh
c3MgQ29udGFjdENvbnRyb2xsZXI7CisKK2NsYXNzIENvbnRhY3RDbGllbnRNb2NrIDogcHVibGlj
IENvbnRhY3RDbGllbnQgeworcHVibGljOgorICAgIENvbnRhY3RDbGllbnRNb2NrKCk7CisgICAg
dmlydHVhbCB+Q29udGFjdENsaWVudE1vY2soKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2
b2lkIHNldENvbnRyb2xsZXIoQ29udGFjdENvbnRyb2xsZXIqKTsKKworICAgIHZvaWQgc2V0UGVy
bWlzc2lvbihib29sIGFsbG93ZWQpOworICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxDb250
YWN0RXJyb3I+KTsKKyAgICB2b2lkIHNldENvbnRhY3RzKFBhc3NSZWZQdHI8Q29udGFjdEFycmF5
Pik7CisKKyAgICAvLyBDb250YWN0Q2xpZW50CisgICAgdmlydHVhbCB2b2lkIGZpbmQoRE9NU3Ry
aW5nTGlzdCosIENvbnRhY3RGaW5kT3B0aW9ucyopOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWwo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2FuY2VsUGVybWlzc2lvblJlcXVlc3QoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0
ZVBlcm1pc3Npb24oKTsKKyAgICB2b2lkIHVwZGF0ZUNvbnRyb2xsZXIoKTsKKworICAgIFJlZlB0
cjxDb250YWN0QXJyYXk+IG1fY29udGFjdHM7CisgICAgUmVmUHRyPENvbnRhY3RFcnJvcj4gbV9l
cnJvcjsKKyAgICBDb250YWN0Q29udHJvbGxlciogbV9jb250cm9sbGVyOworCisgICAgZW51bSBQ
ZXJtaXNzaW9uU3RhdGUgeworICAgICAgICBQZXJtaXNzaW9uU3RhdGVVbnNldCwKKyAgICAgICAg
UGVybWlzc2lvblN0YXRlQWxsb3dlZCwKKyAgICAgICAgUGVybWlzc2lvblN0YXRlRGVuaWVkLAor
ICAgIH0gbV9wZXJtaXNzaW9uU3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQ09OVEFDVFMpCisKKyNlbmRpZgpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gODk5ODYpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMDEsNiArMjIwMSw5NiBAQCBzdGF0aWMgdm9pZCBsYXlvdXRUZXN0Q29udHJv
bGxlck9iamVjdEZpCiAgICAgY29udHJvbGxlci0+ZGVyZWYoKTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgc2V0TW9ja0NvbnRhY3RQZXJtaXNzaW9uQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xs
ZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+c2V0TW9ja0NvbnRh
Y3RQZXJtaXNzaW9uKEpTVmFsdWVUb0Jvb2xlYW4oY29udGV4dCwgYXJndW1lbnRzWzBdKSk7CisK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIHNldE1vY2tDb250YWN0RXJyb3JDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBpbnQgY29kZSA9IEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIDApOworCisgICAgTGF5b3V0VGVzdENvbnRy
b2xsZXIqIGNvbnRyb2xsZXIgPSByZWludGVycHJldF9jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5zZXRN
b2NrQ29udGFjdEVycm9yKGNvZGUpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNb2NrQ29udGFjdENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBpZChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CisKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZGlzcGxheU5hbWUoQWRvcHQsIEpT
VmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAg
ICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHBo
b25lTnVtYmVyOworICAgIGlmIChhcmd1bWVudENvdW50ID49IDMpIHsKKyAgICAgICAgdGFyZ2V0
LmFkb3B0KEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRp
b24pKTsKKyAgICAgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
dGFyZ2V0LmFkb3B0KEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisKKyAgICBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gZW1haWw7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0g
NCkgeworICAgICAgICB0YXJnZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbM10sIGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOwor
ICAgIH0gZWxzZQorICAgICAgICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIiIpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBhZGRyZXNzOworICAg
IGlmIChhcmd1bWVudENvdW50ID49IDUpIHsKKyAgICAgICAgdGFyZ2V0LmFkb3B0KEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzRdLCBleGNlcHRpb24pKTsKKyAgICAgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGFyZ2V0LmFkb3B0KEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CisKKyAgICBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gaW07CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gNikgeworICAgICAgICB0YXJn
ZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbNV0sIGV4Y2Vw
dGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIH0gZWxzZQorICAgICAg
ICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKKworICAg
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBvcmdhbml6YXRpb247CisgICAgaWYgKGFyZ3VtZW50
Q291bnQgPj0gNykgeworICAgICAgICB0YXJnZXQuYWRvcHQoSlNWYWx1ZVRvU3RyaW5nQ29weShj
b250ZXh0LCBhcmd1bWVudHNbNl0sIGV4Y2VwdGlvbikpOworICAgICAgICBBU1NFUlQoISpleGNl
cHRpb24pOworICAgIH0gZWxzZQorICAgICAgICB0YXJnZXQuYWRvcHQoSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIiIpKTsKKworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjYXRl
Z29yeTsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSA4KSB7CisgICAgICAgIHRhcmdldC5hZG9w
dChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1s3XSwgZXhjZXB0aW9uKSk7
CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIHRhcmdl
dC5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIikpOworCisgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHVybDsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSA5KSB7Cisg
ICAgICAgIHRhcmdldC5hZG9wdChKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50
c1s4XSwgZXhjZXB0aW9uKSk7CisgICAgICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgfSBl
bHNlCisgICAgICAgIHRhcmdldC5hZG9wdChKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
IikpOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CisgICAgY29udHJvbGxlci0+c2V0TW9ja0NvbnRhY3QoaWQuZ2V0KCksIGRpc3BsYXlOYW1lLmdl
dCgpLCBwaG9uZU51bWJlci5nZXQoKSwgZW1haWwuZ2V0KCksIGFkZHJlc3MuZ2V0KCksIGltLmdl
dCgpLCBvcmdhbml6YXRpb24uZ2V0KCksIGNhdGVnb3J5LmdldCgpLCB1cmwuZ2V0KCkpOworCisg
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiAvLyBPYmplY3Qg
Q3JlYXRpb24KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09iamVjdChK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0LCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCkBAIC0yNDA1LDYgKzI0OTUsOSBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6CiAgICAgICAgIHsgInNldFNob3VsZFBhaW50QnJva2VuSW1hZ2Ui
LCBzZXRTaG91bGRQYWludEJyb2tlbkltYWdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0VGV4dERpcmVjdGlvbiIsIHNldFRleHREaXJlY3Rpb25DYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJhbGxvd1JvdW5kaW5nSGFja3MiLCBhbGxvd1JvdW5kaW5nSGFja3NDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJzZXRNb2NrQ29udGFjdFBlcm1pc3Npb24iLCBzZXRNb2NrQ29u
dGFjdFBlcm1pc3Npb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJzZXRNb2NrQ29udGFj
dEVycm9yIiwgc2V0TW9ja0NvbnRhY3RFcnJvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsg
InNldE1vY2tDb250YWN0Iiwgc2V0TW9ja0NvbnRhY3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7IDAsIDAsIDAgfQogICAgIH07CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gODk5ODYpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsNiArMzQ2
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZik7
CiAKKyAgICB2b2lkIHNldE1vY2tDb250YWN0UGVybWlzc2lvbihib29sIGFsbG93KTsKKyAgICB2
b2lkIHNldE1vY2tDb250YWN0RXJyb3IoaW50IGNvZGUpOworICAgIHZvaWQgc2V0TW9ja0NvbnRh
Y3QoSlNTdHJpbmdSZWYgaWQsIEpTU3RyaW5nUmVmIGRpc3BsYXlOYW1lLCBKU1N0cmluZ1JlZiBw
aG9uZU51bWJlciwgSlNTdHJpbmdSZWYgZW1haWwsIEpTU3RyaW5nUmVmIGFkZHJlc3MsIEpTU3Ry
aW5nUmVmIGltLCBKU1N0cmluZ1JlZiBvcmdhbml6YXRpb24sIEpTU3RyaW5nUmVmIGNhdGVnb3J5
LCBKU1N0cmluZ1JlZiB1cmwpOworCiBwcml2YXRlOgogICAgIExheW91dFRlc3RDb250cm9sbGVy
KGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0UGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgZXhw
ZWN0ZWRQaXhlbEhhc2gpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9l
bmFibGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9D
b250YWN0cy9lbmFibGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACitUZXN0cyB0aGF0IHRoZSBuYXZpZ2F0b3IuY29udGFjdHMgb2JqZWN0IGlz
IHByZXNlbnQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHR5cGVvZiBu
YXZpZ2F0b3IuY29udGFjdHMgPT0gJ29iamVjdCcgaXMgdHJ1ZQorUEFTUyBoYXNDb250YWN0c1By
b3BlcnR5KCkgaXMgdHJ1ZQorUEFTUyAnY29udGFjdHMnIGluIG5hdmlnYXRvciBpcyB0cnVlCitQ
QVNTIG5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eSgnY29udGFjdHMnKSBpcyB0cnVlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvZW5hYmxlZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2VuYWJsZWQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBp
ZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9lbmFibGVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2Vycm9yLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9lcnJvci1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9l
cnJvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKK1Rlc3RzIENv
bnRhY3RzIGVycm9yIGNhbGxiYWNrIHVzaW5nIHRoZSBtb2NrIHNlcnZpY2UuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGVycm9yLmNvZGUgaXMgbW9ja0NvZGUKK1BBU1Mg
ZXJyb3IuVU5LTk9XTl9FUlJPUiBpcyAwCitQQVNTIGVycm9yLklOVkFMSURfQVJHVU1FTlRfRVJS
T1IgaXMgMQorUEFTUyBlcnJvci5USU1FT1VUX0VSUk9SIGlzIDIKK1BBU1MgZXJyb3IuUEVORElO
R19PUEVSQVRJT05fRVJST1IgaXMgMworUEFTUyBlcnJvci5JT19FUlJPUiBpcyA0CitQQVNTIGVy
cm9yLk5PVF9TVVBQT1JURURfRVJST1IgaXMgNQorUEFTUyBlcnJvci5QRVJNSVNTSU9OX0RFTklF
RF9FUlJPUiBpcyAyMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2Vycm9yLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvZXJyb3IuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL2Vycm9yLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZXJyb3IuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvcGVy
bWlzc2lvbi1kZW5pZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvZG9tL0NvbnRhY3RzL3Blcm1pc3Npb24tZGVuaWVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3Blcm1pc3Npb24tZGVuaWVkLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgQ29udGFjdHMg
d2hlbiBwZXJtaXNzaW9uIGlzIGRlbmllZCwgdXNpbmcgdGhlIG1vY2sgc2VydmljZS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZXJyb3IuY29kZSBpcyBlcnJvci5QRVJN
SVNTSU9OX0RFTklFRF9FUlJPUgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3Blcm1p
c3Npb24tZGVuaWVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29u
dGFjdHMvcGVybWlzc2lvbi1kZW5pZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0NvbnRhY3RzL3Blcm1pc3Npb24tZGVuaWVkLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvcGVybWlzc2lvbi1kZW5pZWQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc3VjY2Vz
cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFj
dHMvc3VjY2Vzcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9Db250YWN0cy9zdWNjZXNzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMSBAQAorVGVzdHMgQ29udGFjdHMgc3VjY2VzcyBjYWxsYmFjayB1c2luZyB0aGUgbW9jayBz
ZXJ2aWNlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBjb250YWN0Lmlk
IGlzIG1vY2tJZAorUEFTUyBjb250YWN0LmRpc3BsYXlOYW1lIGlzIG1vY2tEaXNwbGF5TmFtZQor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3N1Y2Nlc3MuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zdWNjZXNzLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zdWNjZXNzLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvc3VjY2Vzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zY3JpcHQtdGVz
dHMvVEVNUExBVEUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250
YWN0cy9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0iWU9VUl9KU19GSUxFX0hFUkUiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL2Vu
YWJsZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2Ny
aXB0LXRlc3RzL2VuYWJsZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9Db250YWN0cy9zY3JpcHQtdGVzdHMvZW5hYmxlZC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOCBAQAorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgdGhlIG5hdmlnYXRvci5jb250YWN0cyBv
YmplY3QgaXMgcHJlc2VudC4iKTsKKworZnVuY3Rpb24gaGFzQ29udGFjdHNQcm9wZXJ0eSgpCit7
CisgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gbmF2aWdhdG9yKSB7CisgICAgICAgIGlmIChwcm9w
ZXJ0eSA9PSAiY29udGFjdHMiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJ0eXBlb2YgbmF2aWdhdG9yLmNvbnRh
Y3RzID09ICdvYmplY3QnIik7CitzaG91bGRCZVRydWUoImhhc0NvbnRhY3RzUHJvcGVydHkoKSIp
Oworc2hvdWxkQmVUcnVlKCInY29udGFjdHMnIGluIG5hdmlnYXRvciIpOworc2hvdWxkQmVUcnVl
KCJuYXZpZ2F0b3IuaGFzT3duUHJvcGVydHkoJ2NvbnRhY3RzJykiKTsKKword2luZG93LmpzVGVz
dElzQXN5bmMgPSBmYWxzZTsKK3dpbmRvdy5zdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL2Vycm9yLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9l
cnJvci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3Nj
cmlwdC10ZXN0cy9lcnJvci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorZGVzY3Jp
cHRpb24oIlRlc3RzIENvbnRhY3RzIGVycm9yIGNhbGxiYWNrIHVzaW5nIHRoZSBtb2NrIHNlcnZp
Y2UuIik7CisKK3ZhciBtb2NrQ29kZSA9IDI7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQ29udGFjdFBlcm1pc3Np
b24odHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0NvbnRhY3RFcnJvciht
b2NrQ29kZSk7Cit9IGVsc2UKKyAgICBkZWJ1ZygnVGhpcyB0ZXN0IGNhbiBub3QgYmUgcnVuIHdp
dGhvdXQgdGhlIExheW91dFRlc3RDb250cm9sbGVyJyk7CisKK3ZhciBlcnJvcjsKK25hdmlnYXRv
ci5jb250YWN0cy5maW5kKFsnZGlzcGxheU5hbWUnXSwgZnVuY3Rpb24oY29udGFjdHMpIHsKKyAg
ICB0ZXN0RmFpbGVkKCdTdWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7Cisg
ICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbihlKSB7CisgICAgZXJyb3IgPSBlOworICAg
IHNob3VsZEJlKCdlcnJvci5jb2RlJywgJ21vY2tDb2RlJyk7CisgICAgc2hvdWxkQmUoJ2Vycm9y
LlVOS05PV05fRVJST1InLCAnMCcpOworICAgIHNob3VsZEJlKCdlcnJvci5JTlZBTElEX0FSR1VN
RU5UX0VSUk9SJywgJzEnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuVElNRU9VVF9FUlJPUicsICcy
Jyk7CisgICAgc2hvdWxkQmUoJ2Vycm9yLlBFTkRJTkdfT1BFUkFUSU9OX0VSUk9SJywgJzMnKTsK
KyAgICBzaG91bGRCZSgnZXJyb3IuSU9fRVJST1InLCAnNCcpOworICAgIHNob3VsZEJlKCdlcnJv
ci5OT1RfU1VQUE9SVEVEX0VSUk9SJywgJzUnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IuUEVSTUlT
U0lPTl9ERU5JRURfRVJST1InLCAnMjAnKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworCit3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3NjcmlwdC10ZXN0cy9w
ZXJtaXNzaW9uLWRlbmllZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9D
b250YWN0cy9zY3JpcHQtdGVzdHMvcGVybWlzc2lvbi1kZW5pZWQuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9Db250YWN0cy9zY3JpcHQtdGVzdHMvcGVybWlzc2lvbi1k
ZW5pZWQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0
cyBDb250YWN0cyB3aGVuIHBlcm1pc3Npb24gaXMgZGVuaWVkLCB1c2luZyB0aGUgbW9jayBzZXJ2
aWNlLiIpOworCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuc2V0TW9ja0NvbnRhY3RQZXJtaXNzaW9uKGZhbHNlKTsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQ29udGFjdCgiMSIsICJCb2IiKTsKK30gZWxzZQorICAg
IGRlYnVnKCdUaGlzIHRlc3QgY2FuIG5vdCBiZSBydW4gd2l0aG91dCB0aGUgTGF5b3V0VGVzdENv
bnRyb2xsZXInKTsKKwordmFyIGVycm9yOworbmF2aWdhdG9yLmNvbnRhY3RzLmZpbmQoWydkaXNw
bGF5TmFtZSddLCBmdW5jdGlvbihjb250YWN0cykgeworICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3Mg
Y2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30s
IGZ1bmN0aW9uKGUpIHsKKyAgICBlcnJvciA9IGU7CisgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUn
LCAnZXJyb3IuUEVSTUlTU0lPTl9ERU5JRURfRVJST1InKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K30pOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0NvbnRhY3RzL3Njcmlw
dC10ZXN0cy9zdWNjZXNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0Nv
bnRhY3RzL3NjcmlwdC10ZXN0cy9zdWNjZXNzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vQ29udGFjdHMvc2NyaXB0LXRlc3RzL3N1Y2Nlc3MuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjQgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyBDb250YWN0cyBzdWNjZXNzIGNh
bGxiYWNrIHVzaW5nIHRoZSBtb2NrIHNlcnZpY2UuIik7CisKK3ZhciBtb2NrSWQgPSAiMSI7Cit2
YXIgbW9ja0Rpc3BsYXlOYW1lID0gIkJvYiI7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrQ29udGFjdFBlcm1pc3Np
b24odHJ1ZSk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0NvbnRhY3QobW9ja0lk
LCBtb2NrRGlzcGxheU5hbWUpOworfSBlbHNlCisgICAgZGVidWcoJ1RoaXMgdGVzdCBjYW4gbm90
IGJlIHJ1biB3aXRob3V0IHRoZSBMYXlvdXRUZXN0Q29udHJvbGxlcicpOworCit2YXIgY29udGFj
dDsKK25hdmlnYXRvci5jb250YWN0cy5maW5kKFsnZGlzcGxheU5hbWUnXSwgZnVuY3Rpb24oY29u
dGFjdHMpIHsKKyAgICBjb250YWN0ID0gY29udGFjdHNbMF07CisgICAgc2hvdWxkQmUoJ2NvbnRh
Y3QuaWQnLCAnbW9ja0lkJyk7CisgICAgc2hvdWxkQmUoJ2NvbnRhY3QuZGlzcGxheU5hbWUnLCAn
bW9ja0Rpc3BsYXlOYW1lJyk7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9LCBmdW5jdGlvbihlKSB7
CisgICAgdGVzdEZhaWxlZCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30pOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="93671"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>