<?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>52955</bug_id>
          
          <creation_ts>2011-01-22 03:59:04 -0800</creation_ts>
          <short_desc>Web Inspector: first step of splitting InspectorController</short_desc>
          <delta_ts>2011-01-24 12:33:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52510</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>338562</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-22 03:59:04 -0800</bug_when>
    <thetext>Splitting InspectorController is a bit tricky process. Especially when 4 people commit a number of patches a day.

As a first step I&apos;ll do the next things:
1) rename existing InspectorController to InspectorAgent;
2) s/nspectorController/nspectorAgent/g everywhere in WebCore/inspector but InspectorInstrumentation;
3) create a fake InspectorController as a child of InspectorAgent for the rest of WebCore and WebKit;

The second step is a migration a small set of functions described in bug 52510 from InspectorAgent to InspectorController.

As far as the second step will have significant changes in the functions&apos; implementation I&apos;ll do it as a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338564</commentid>
    <comment_count>1</comment_count>
      <attachid>79840</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-22 04:11:35 -0800</bug_when>
    <thetext>Created attachment 79840
[patch] initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338565</commentid>
    <comment_count>2</comment_count>
      <attachid>79841</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-22 04:23:52 -0800</bug_when>
    <thetext>Created attachment 79841
[patch] initial version. Rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338571</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-01-22 04:33:57 -0800</bug_when>
    <thetext>looks like efl has no dependency between InspectorBackendDispatcher and its generator CodeGeneratorInpsector.pm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338676</commentid>
    <comment_count>4</comment_count>
      <attachid>79841</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-23 00:11:45 -0800</bug_when>
    <thetext>Comment on attachment 79841
[patch] initial version. Rebased. 

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

Please provide proper diff for InspectorAgent copy. Rest looks good.

&gt; Source/WebCore/ChangeLog:5
&gt; +        Web Inspector: first step of splitting InspectorController.

I&apos;d say it is 41st step :)

&gt; Source/WebCore/ChangeLog:11
&gt; +        2) s/nspectorController/nspectorAgent/g everywhere in WebCore/inspector but InspectorInstrumentation;

Why not inspector instrumentation? Too many changes?

&gt; Source/WebCore/ChangeLog:12
&gt; +        3) create a fake InspectorController as a child of InspectorAgent for the rest of WebCore and WebKit;

&quot;as a child of&quot; -&gt; &quot;derived from&quot;

&gt; Source/WebCore/ChangeLog:14
&gt; +        The second step is a migration a small set of functions described in bug 52510 from InspectorAgent to InspectorController.

is a migration _of_ small

&gt; Source/WebCore/WebCore.exp.in:1359
&gt; +__ZN7WebCore14InspectorAgent4showEv

This part is unnecessary. In the end of the day, WebCore should not expose InspectorAgent. But I see that it is a temporary measure.

&gt; Source/WebCore/WebCore.xcodeproj/project.pbxproj:1268
&gt; +		4F2D205412EAE7B3005C2874 /* InspectorAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F2D205212EAE7B3005C2874 /* InspectorAgent.h */; settings = {ATTRIBUTES = (Private, ); }; };

Same as for exports, ATTRIBUTES=Private should not be there after the refactoring.

&gt; Source/WebCore/inspector/InspectorAgent.cpp:1
&gt; +/*

Please add

[diff]
        renames = copies

In the .git/config

so that we could see the changes in the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338678</commentid>
    <comment_count>5</comment_count>
      <attachid>79864</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-23 00:32:20 -0800</bug_when>
    <thetext>Created attachment 79864
[PATCH] More user-friendly diff (shows diff in copy)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338680</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-23 01:37:47 -0800</bug_when>
    <thetext>Committed r76459: &lt;http://trac.webkit.org/changeset/76459&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79840</attachid>
            <date>2011-01-22 04:11:35 -0800</date>
            <delta_ts>2011-01-22 04:23:52 -0800</delta_ts>
            <desc>[patch] initial version</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>198411</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTVkODc5MC4uMDVkYTViYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTMsNiArMTE1Myw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOWE2
ODk2Li5hZWNjNzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI5IEBACisyMDExLTAxLTIyICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBmaXJzdCBzdGVw
IG9mIHNwbGl0dGluZyBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIFNwbGl0dGluZyBJ
bnNwZWN0b3JDb250cm9sbGVyIGlzIGEgYml0IHRyaWNreSBwcm9jZXNzLgorCisgICAgICAgIEFz
IGEgZmlyc3Qgc3RlcCBJJ2xsIGRvIHRoZSBuZXh0IHRoaW5nczoKKyAgICAgICAgMSkgcmVuYW1l
IGV4aXN0aW5nIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gSW5zcGVjdG9yQWdlbnQ7CisgICAgICAg
IDIpIHMvbnNwZWN0b3JDb250cm9sbGVyL25zcGVjdG9yQWdlbnQvZyBldmVyeXdoZXJlIGluIFdl
YkNvcmUvaW5zcGVjdG9yIGJ1dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CisgICAgICAgIDMp
IGNyZWF0ZSBhIGZha2UgSW5zcGVjdG9yQ29udHJvbGxlciBhcyBhIGNoaWxkIG9mIEluc3BlY3Rv
ckFnZW50IGZvciB0aGUgcmVzdCBvZiBXZWJDb3JlIGFuZCBXZWJLaXQ7CisKKyAgICAgICAgVGhl
IHNlY29uZCBzdGVwIGlzIGEgbWlncmF0aW9uIGEgc21hbGwgc2V0IG9mIGZ1bmN0aW9ucyBkZXNj
cmliZWQgaW4gYnVnIDUyNTEwIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJv
bGxlci4KKworICAgICAgICBBcyBmYXIgYXMgdGhlIHNlY29uZCBzdGVwIHdpbGwgaGF2ZSBzaWdu
aWZpY2FudCBjaGFuZ2VzIGluIHRoZSBmdW5jdGlvbnMnIGltcGxlbWVudGF0aW9uIEknbGwgZG8g
aXQgYXMgYSBzZXBhcmF0ZSBwYXRjaC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTI5NTUKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5v
ZGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0
RE9NU3RvcmFnZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlRm9ySWRDYWxsYmFjayk6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OkluamVjdGVkU2NyaXB0SG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1l
c3NhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VG
b3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RE9NU3Rv
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2Ny
aXB0Rm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6
aW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0
Ojpmcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENy
ZWF0ZVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZERl
c3Ryb3lXb3JrZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpkaXNjb25uZWN0Q29udHJvbGxlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50Ojp+SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2ll
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6aGlnaGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6aGlnaGxpZ2h0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omhp
ZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoYW5k
bGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNob3dQYW5lbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6dW5iaW5kQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6bWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmlzTWFpblJlc291cmNlTG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuc3VyZVNldHRpbmdzTG9hZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zy
b250ZW5kVGFzazo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6cGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvc3RXb3JrZXJOb3Rp
ZmljYXRpb25Ub0Zyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpk
aWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZERl
c3Ryb3lXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZE9wZW5E
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YnVpbGRBcnJheUZvckNvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ29va2ll
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRSZWNlaXZlV2ViU29j
a2V0SGFuZHNoYWtlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpp
c1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpwcm9maWxlckVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjpkaXNhYmxlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRBbGxC
cm93c2VyQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6cXVh
ZFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3SGlnaGxpZ2h0Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdIaWdobGlnaHRGb3JM
aW5lQm94ZXNPclNWR1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRGcm9tRnJh
bWVUb01haW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkcmF3Tm9kZUhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZHJhd0VsZW1lbnRUaXRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6b3BlbkluSW5zcGVjdGVkV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZW1vdmVBbGxTY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0
SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
OjppbnNwZWN0ZWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlbG9h
ZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNldEV4dHJhSGVhZGVy
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvckNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5qZWN0ZWRTY3JpcHRIb3N0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlkZUZyYW1lSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6aW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmNvbnNvbGVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y3Nz
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRvbUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbmplY3RlZFNjcmlwdEFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpydW50aW1lQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnRpbWVsaW5lQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmRhdGFiYXNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OmRvbVN0b3JhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6ZmlsZVN5c3RlbUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50Ojpicm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6ZGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
cHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YXBwbGlj
YXRpb25DYWNoZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoYXNJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6aGFzRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXJ0
UHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wUHJvZmls
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkZWJ1Z2dlckVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXR0aW5ncyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Omdl
dEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50OjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVzdG9y
ZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxs
UmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6d2lsbE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVu
dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29uc29sZUFnZW50Ojp+SW5zcGVjdG9yQ29uc29sZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzb3VyY2VSZXRyaWV2ZWRC
eVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNv
bGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
c29sZUFnZW50OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudENhbGxiYWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpJbnNwZWN0b3JGaWxl
U3lzdGVtQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Z2V0
RmlsZVN5c3RlbVBhdGhBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudDo6ZGlkR2V0RmlsZVN5c3RlbUVycm9yKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNldEV4dGVuc2lvbkFQSSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3Nh
Z2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOgorCiAyMDExLTAxLTIxICBZdXJ5IFNl
bWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDA5NzUwOTQuLjZkZTNhYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC0xOTUxLDYgKzE5NTEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4
IDI1MGI2MjkuLmVhYmNhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xMzU2LDI5ICsxMzU2
LDI1IEBAIF9fWk43V2ViQ29yZTIyR2VvbG9jYXRpb25TZXJ2aWNlTW9jazhzZXRFcnJvckVOM1dU
RjEwUGFzc1JlZlB0cklOU18xM1Bvc2l0aW9uRXJyCiAjZW5kaWYKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50NHNob3dFdgorX19aTjdXZWJDb3Jl
MTRJbnNwZWN0b3JBZ2VudDVjbG9zZUV2CitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50OXNo
b3dQYW5lbEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxMkNv
bnNvbGVQYW5lbEUKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxM1Byb2ZpbGVzUGFuZWxF
CitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTRlbmFibGVQcm9maWxlckViYgorX19aTjdX
ZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1ZGlzYWJsZURlYnVnZ2VyRWIKK19fWk43V2ViQ29yZTE0
SW5zcGVjdG9yQWdlbnQxNWRpc2FibGVQcm9maWxlckViCitfX1pON1dlYkNvcmUxNEluc3BlY3Rv
ckFnZW50MThkaXNjb25uZWN0RnJvbnRlbmRFdgorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2Vu
dDIwc3RvcFRpbWVsaW5lUHJvZmlsZXJFdgorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDIx
c2hvd0FuZEVuYWJsZURlYnVnZ2VyRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQyMXN0
YXJ0VGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjNpbnNw
ZWN0b3JTdGFydHNBdHRhY2hlZEV2CitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MjVldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTE0SW5z
cGVjdG9yQWdlbnQyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRy
SU5TXzIzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQyNnNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkRWIKK19fWk43V2ViQ29yZTE0SW5zcGVj
dG9yQWdlbnQyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKK19fWk43V2ViQ29yZTE0SW5z
cGVjdG9yQWdlbnQyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2CiBfX1pON1dlYkNvcmUx
NUluc3BlY3RvckNsaWVudDMxZG9EaXNwYXRjaE1lc3NhZ2VPbkZyb250ZW5kUGFnZUVQTlNfNFBh
Z2VFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxMkNv
bnNvbGVQYW5lbEUKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjEyU2NyaXB0c1Bh
bmVsRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTNQcm9maWxlc1BhbmVsRQot
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjFzaG93QW5kRW5hYmxlRGVidWdnZXJF
dgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTRlbmFibGVQcm9maWxlckViYgot
X19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlRGVidWdnZXJFYgotX19a
TjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTVkaXNhYmxlUHJvZmlsZXJFYgotX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMThkaXNjb25uZWN0RnJvbnRlbmRFdgotX19aTjdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjBzdG9wVGltZWxpbmVQcm9maWxlckV2Ci1fX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXN0YXJ0VGltZWxpbmVQcm9maWxlckV2Ci1f
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyM2luc3BlY3RvclN0YXJ0c0F0dGFjaGVk
RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjI1ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZEVsUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xs
ZXIyNnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRFRUUKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFYgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyMjdzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgotX19aTjdXZWJDb3JlMTlJ
bnNwZWN0b3JDb250cm9sbGVyMjZzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pOSzdX
ZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMzFpc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9m
aWxlRXYKLV9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNXByb2ZpbGVyRW5hYmxl
ZEV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXI0c2hvd0V2Ci1fX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXI1Y2xvc2VFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JD
b250cm9sbGVyN2luc3BlY3RFUE5TXzROb2RlRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyOXNob3dQYW5lbEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnRMb2NhbDEybW92ZVdpbmRvd0J5RWZmCiBfX1pON1dlYkNvcmUyOEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50TG9jYWwxNGZyb250ZW5kTG9hZGVkRXYKIF9fWk43V2ViQ29yZTI4
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE1Y2FuQXR0YWNoV2luZG93RXYKQEAgLTEzOTAs
OCArMTM4Niw5IEBAIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDI2
Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHRFagogX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9u
dGVuZENsaWVudExvY2FsMjdyZXN0b3JlQXR0YWNoZWRXaW5kb3dIZWlnaHRFdgogX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsQzJFUE5TXzE5SW5zcGVjdG9yQ29udHJv
bGxlckVQTlNfNFBhZ2VFCiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9j
YWxEMkV2Ci1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTdkcmF3Tm9kZUhpZ2hs
aWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCi1fX1pOSzdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyN2VuYWJsZWRFdgorX19aTks3V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNXByb2ZpbGVy
RW5hYmxlZEV2CitfX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE3ZHJhd05vZGVIaWdobGln
aHRFUk5TXzE1R3JhcGhpY3NDb250ZXh0RQorX19aTks3V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQz
MWlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGVFdgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
SkFWQV9CUklER0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2E1MjgwNC4uOGJlZTVjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjAwNiw2ICsyMDA2LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCcs
CisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCcsCisgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9J
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCA3Yjk1M2YzLi40MzdhNzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTA0Miw2ICsxMDQyLDcgQEAg
U09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
SG9zdC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwIFwKQEAgLTE5NDAsNiArMTk0MSw3IEBAIEhFQURFUlMgKz0gXAogICAg
IGluc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuaCBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oIFwKKyAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZjFkYTkyMi4uMTA2
M2VhMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTY1MDcwLDYgKzY1MDcwLDE0IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudC5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNw
ZWN0b3JBZ2VudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNGYwMTUzMC4uZDAwMDc2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI2NCw2ICsxMjY0
LDggQEAKIAkJNEUxOTU5MkUwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTI4MEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggKi87IH07CiAJCTRGMTUzNERFMTFCNTMyRUMw
MDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNEREMTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVo
YXZpb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk0RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMTUzNERGMTFCNTMz
MDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAv
KiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEYyRDIwNTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNEYyRDIwNTUx
MkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMkQyMDUzMTJFQUU3QjMwMDVDMjg3NCAvKiBJ
bnNwZWN0b3JBZ2VudC5jcHAgKi87IH07CiAJCTRGMzI4OUI1MTFBNDJBQUIwMDVBQkU3RSAvKiBJ
bnNwZWN0b3JWYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAg
Ki87IH07CiAJCTRGMzI4OUI2MTFBNDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRGMzI4OUI0MTFB
NDJBQUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0RjRGNUZGQjExQ0JEMkUxMDBBMTg2QkYgLyog
SW5zcGVjdG9yRnJvbnRlbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEY0RjVGRkExMUNCRDJEMjAwQTE4NkJGIC8qIEluc3BlY3RvckZyb250ZW5k
LmNwcCAqLzsgfTsKQEAgLTc2NjUsNiArNzY2Nyw4IEBACiAJCTRFMTk1OTI4MEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5RXhwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZWRpYVF1ZXJ5RXhwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMTUzNERE
MTFCNTMyRUMwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRWRpdGluZ0JlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTRGMTUzNERGMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nQmVoYXZpb3JUeXBlcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQg
LyogSW5zcGVjdG9yQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEYyRDIwNTMxMkVB
RTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JWYWx1ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjMyODlCNDExQTQyQUFCMDA1QUJFN0Ug
LyogSW5zcGVjdG9yVmFsdWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3RvclZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RjRGNUZGQTEx
Q0JEMkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJvbnRlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJvbnRlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI5NjcsNiArMTI5NzEsOCBAQAogCQkJCTdBMEU3NkY3MTBCRjA4
RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaCAqLywKIAkJCQk3QTBFNzZGODEwQkYw
OEVEMDBBMDI3NkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbCAqLywKIAkJCQk3QTU2M0Y5NTEy
REY1QzkxMDBGNDUzNkQgLyogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgKi8sCisJCQkJNEYyRDIw
NTIxMkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggKi8sCisJCQkJNEYyRDIwNTMx
MkVBRTdCMzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmNwcCAqLywKIAkJCQlCODg1RThEMjEx
RTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCAqLywK
IAkJCQlCODg1RThEMzExRTA2REQyMDA5RkZCRjQgLyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmggKi8sCiAJCQkJRjNENEM0NzYxMkUwNzY2MzAwM0RBMTUwIC8qIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50LmNwcCAqLywKQEAgLTIyNDExLDYgKzIyNDE3LDcgQEAKIAkJCQlF
MUJFNTEyRTBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0RENEQ4NzBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4QUUzNEYxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0RjJEMjA1NDEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9y
QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjUxMDYsNiArMjUxMTMsNyBAQAogCQkJCUUxQkU1
MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkM4QUUzNEUxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTRGMkQyMDU1MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNwZWN0
b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA5NzEwOThk
Li5kZDM2YzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVj
dGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0SG9zdC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20u
aCIKQEAgLTEyOCw4ICsxMjgsNyBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0Ojpub2Rl
Rm9ySWQoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpOwotICAgIGlmICghaWMpCisgICAgaWYgKCFpbXBsKCktPmluc3Bl
Y3RvckFnZW50KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTE3Nyw4ICsxNzYsNyBAQCBKU1ZhbHVl
IEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWljKQorICAgIGlmICghaW1wbCgpLT5pbnNwZWN0
b3JBZ2VudCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIFN0b3JhZ2Uq
IHN0b3JhZ2UgPSB0b1N0b3JhZ2UoZXhlYy0+YXJndW1lbnQoMCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0
SG9zdEN1c3RvbS5jcHAKaW5kZXggNmJkNWFiYi4uY2UxNzMyYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5o
IgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMTQ3LDgg
KzE0Niw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0SG9zdDo6bm9k
ZUZvcklkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBob3N0LT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWYgKCFpYykKKyAgICBpZiAoIWhv
c3QtPmluc3BlY3RvckFnZW50KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
ICAgICByZXR1cm4gdG9WOChub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggZTIxNWE5MS4uMmFiNWVjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0K
QEAgLTYwLDcgKzYwLDcgQEAgJHR5cGVUcmFuc2Zvcm17IkluamVjdGVkU2NyaXB0In0gPSB7CiAg
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRB
Z2VudCgpIiwKIH07CiAkdHlwZVRyYW5zZm9ybXsiSW5zcGVjdG9yIn0gPSB7Ci0gICAgImZvcndh
cmRIZWFkZXIiID0+ICJJbnNwZWN0b3JDb250cm9sbGVyLmgiLCAjIEZJWE1FOiBUZW1wb3Jhcnkg
c29sdXRpb24gdW50aWwgZXh0cmFjdGluZyB0aGUgcmVhbCBJbnNwZWN0b3JBZ2VudCBmcm9tIElu
c3BlY3RvckNvbnRyb2xsZXIuCisgICAgImZvcndhcmRIZWFkZXIiID0+ICJJbnNwZWN0b3JBZ2Vu
dC5oIiwKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckFnZW50IiwKIH07CiAk
dHlwZVRyYW5zZm9ybXsiTmV0d29yayJ9ID0gewpAQCAtMjY5LDcgKzI2OSw2IEBAIHN1YiBHZW5l
cmF0ZUludGVyZmFjZQogICAgICRiYWNrZW5kQ2xhc3NOYW1lID0gJGNsYXNzTmFtZSAuICJCYWNr
ZW5kRGlzcGF0Y2hlciI7CiAgICAgJGJhY2tlbmRKU1N0dWJOYW1lID0gJGNsYXNzTmFtZSAuICJC
YWNrZW5kU3R1YiI7CiAgICAgbXkgQGJhY2tlbmRIZWFkOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgIHR5cGVkZWYgSW5zcGVjdG9yQ29udHJvbGxlciBJbnNwZWN0b3JBZ2VudDsiKTsgIyBG
SVhNRTogVGVtcG9yYXJ5IHN1YnN0aXR1dGlvbiB1bnRpbCBleHRyYWN0aW5nIEluc3BlY3RvckFn
ZW50IGZyb20gSW5zcGVjdG9yQ29udHJvbGxlci4KICAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAke2JhY2tlbmRDbGFzc05hbWV9KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkgOiBt
X2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KSB7IH0iKTsKICAgICBwdXNoKEBiYWNrZW5k
SGVhZCwgIiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgZXJyb3JUZXh0KSBjb25zdDsiKTsKICAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Iik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCmluZGV4IGQ2N2FkYWYu
LmZiYjRkYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuY3BwCkBAIC0zOSw5ICszOSw5IEBACiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNj
cmlwdFNvdXJjZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudC5oIgpAQCAtNjksOCArNjksOCBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluamVjdGVkU2NyaXB0SG9zdDo6SW5qZWN0
ZWRTY3JpcHRIb3N0KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCi0g
ICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKK0luamVjdGVk
U2NyaXB0SG9zdDo6SW5qZWN0ZWRTY3JpcHRIb3N0KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCkKKyAgICA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX25l
eHRJbmplY3RlZFNjcmlwdElkKDEpCiAgICAgLCBtX2xhc3RXb3JrZXJJZCgxIDw8IDMxKSAvLyBE
aXN0aW5ndWlzaCBpZHMgb2YgZmFrZSB3b3JrZXJzIGZyb20gcmVhbCBvbmVzLCB0byBtaW5pbWl6
ZSB0aGUgY2hhbmNlcyB0aGV5IG92ZXJsYXAuCiB7CkBAIC04OSw4ICs4OSw4IEBAIHZvaWQgSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpldmFsdWF0ZU9uU2VsZihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uQm9k
eSwgUGFzc1JlZlB0cjxJCiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpjbGVhckNvbnNvbGVN
ZXNzYWdlcygpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQWdlbnQoKS0+Y2xlYXJDb25zb2xlTWVzc2FnZXMo
KTsKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+
Y29uc29sZUFnZW50KCktPmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRTY3JpcHRIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC0xMzAsMjMgKzEz
MCwyMyBAQCBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBs
b25nIG51bSkKICNpZiBFTkFCTEUoREFUQUJBU0UpCiBEYXRhYmFzZSogSW5qZWN0ZWRTY3JpcHRI
b3N0OjpkYXRhYmFzZUZvcklkKGxvbmcgZGF0YWJhc2VJZCkKIHsKLSAgICBpZiAobV9pbnNwZWN0
b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGF0YWJhc2VBZ2VudCgpKQot
ICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUFnZW50KCktPmRh
dGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7CisgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQgJiYgbV9p
bnNwZWN0b3JBZ2VudC0+ZGF0YWJhc2VBZ2VudCgpKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0
b3JBZ2VudC0+ZGF0YWJhc2VBZ2VudCgpLT5kYXRhYmFzZUZvcklkKGRhdGFiYXNlSWQpOwogICAg
IHJldHVybiAwOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RGF0YWJhc2Uo
RGF0YWJhc2UqIGRhdGFiYXNlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUFnZW50KCkpCi0gICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGF0YWJhc2VBZ2VudCgpLT5zZWxlY3REYXRhYmFzZShkYXRhYmFzZSk7
CisgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQgJiYgbV9pbnNwZWN0b3JBZ2VudC0+ZGF0YWJhc2VB
Z2VudCgpKQorICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCktPnNlbGVj
dERhdGFiYXNlKGRhdGFiYXNlKTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3Rv
cmFnZSkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZG9tU3RvcmFnZUFnZW50KCkpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZG9tU3RvcmFnZUFnZW50KCktPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZSk7CisgICAgaWYg
KG1faW5zcGVjdG9yQWdlbnQgJiYgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCkp
CisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmRvbVN0b3JhZ2VBZ2VudCgpLT5zZWxlY3RET01T
dG9yYWdlKHN0b3JhZ2UpOwogfQogI2VuZGlmCiAKQEAgLTE2Niw3ICsxNjYsNyBAQCBJbmplY3Rl
ZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoSW5z
cGVjdG9yT2JqZWN0KiBvYgogCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6Omlu
amVjdGVkU2NyaXB0Rm9yTWFpbkZyYW1lKCkKIHsKLSAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRG
b3IobWFpbldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpKSk7CisgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0Rm9yKG1haW5X
b3JsZFNjcmlwdFN0YXRlKG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZy
YW1lKCkpKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpc2NhcmRJbmplY3RlZFNj
cmlwdHMoKQpAQCAtMTkyLDE2ICsxOTIsMTYgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnJl
bGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAobG9uZyBpbmplY3RlZFNjcmlwdElkLCBjb25zdAogCiBJ
bnNwZWN0b3JET01BZ2VudCogSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0b3JET01BZ2VudCgp
CiB7Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgaWYgKCFtX2luc3BlY3Rv
ckFnZW50KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kb21BZ2VudCgpOworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5kb21BZ2VudCgp
OwogfQogCiBJbnNwZWN0b3JGcm9udGVuZCogSW5qZWN0ZWRTY3JpcHRIb3N0Ojpmcm9udGVuZCgp
CiB7Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgaWYgKCFtX2luc3BlY3Rv
ckFnZW50KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5mcm9udGVuZCgpOworICAgIHJldHVybiBtX2luc3BlY3RvckFnZW50LT5mcm9udGVuZCgp
OwogfQogCiBTdHJpbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdFNvdXJjZSgp
CkBAIC0yMjMsMTQgKzIyMywxNCBAQCBsb25nIEluamVjdGVkU2NyaXB0SG9zdDo6bmV4dFdvcmtl
cklkKCkKIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENyZWF0ZVdvcmtlcihsb25nIGlk
LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKIHsKLSAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZENy
ZWF0ZVdvcmtlcihpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcik7CisgICAgaWYgKG1faW5zcGVjdG9y
QWdlbnQpCisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmRpZENyZWF0ZVdvcmtlcihpZCwgdXJs
LCBpc1NoYXJlZFdvcmtlcik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpkaWREZXN0
cm95V29ya2VyKGxvbmcgaWQpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKLSAg
ICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kaWREZXN0cm95V29ya2VyKGlkKTsKKyAgICBp
ZiAobV9pbnNwZWN0b3JBZ2VudCkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlkRGVzdHJv
eVdvcmtlcihpZCk7CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAppbmRleCAxMDhmMTE4Li5mNTFm
OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5o
CkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIEluamVjdGVkU2NyaXB0SG9zdF9oCiAKICNpbmNs
dWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNs
dWRlICJTY3JpcHRTdGF0ZS5oIgogCkBAIC01Miw5ICs1Miw5IEBAIGNsYXNzIFN0b3JhZ2U7CiBj
bGFzcyBJbmplY3RlZFNjcmlwdEhvc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxJbmplY3RlZFNjcmlw
dEhvc3Q+CiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5qZWN0ZWRTY3JpcHRI
b3N0PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbmplY3RlZFNjcmlwdEhvc3Q+IGNyZWF0ZShJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEluamVjdGVkU2NyaXB0SG9zdChpbnNwZWN0b3JDb250cm9sbGVyKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5qZWN0ZWRTY3JpcHRIb3N0KGluc3BlY3RvckFnZW50KSk7CiAgICAg
fQogCiAgICAgfkluamVjdGVkU2NyaXB0SG9zdCgpOwpAQCAtNjIsOCArNjIsOCBAQCBwdWJsaWM6
CiAgICAgLy8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCiAgICAgdm9pZCBldmFsdWF0ZU9uU2VsZihj
b25zdCBTdHJpbmcmIGZ1bmN0aW9uQm9keSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJn
dW1lbnRzQXJyYXksIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAKLSAgICBJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JDb250cm9sbGVyOyB9Ci0gICAgdm9pZCBkaXNjb25uZWN0Q29udHJvbGxlcigpIHsgbV9pbnNw
ZWN0b3JDb250cm9sbGVyID0gMDsgfQorICAgIEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2Vu
dCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQ7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RDb250
cm9sbGVyKCkgeyBtX2luc3BlY3RvckFnZW50ID0gMDsgfQogCiAgICAgdm9pZCBjbGVhckNvbnNv
bGVNZXNzYWdlcygpOwogCkBAIC05NiwxNCArOTYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGNhbkFjY2Vzc0luc3BlY3RlZFdpbmRvdyhTY3JpcHRTdGF0ZSopOwogCiBwcml2YXRlOgot
ICAgIEluamVjdGVkU2NyaXB0SG9zdChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyKTsKKyAgICBJbmplY3RlZFNjcmlwdEhvc3QoSW5zcGVjdG9yQWdlbnQqKTsKICAgICBJ
bnNwZWN0b3JET01BZ2VudCogaW5zcGVjdG9yRE9NQWdlbnQoKTsKICAgICBJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQoKTsKICAgICBTdHJpbmcgaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKTsKICAg
ICBTY3JpcHRPYmplY3QgY3JlYXRlSW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgbG9uZyBpZCk7CiAgICAgdm9pZCBkaXNjYXJkSW5q
ZWN0ZWRTY3JpcHQoU2NyaXB0U3RhdGUqKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1f
aW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2Vu
dDsKICAgICBsb25nIG1fbmV4dEluamVjdGVkU2NyaXB0SWQ7CiAgICAgbG9uZyBtX2xhc3RXb3Jr
ZXJJZDsKICAgICB0eXBlZGVmIEhhc2hNYXA8bG9uZywgSW5qZWN0ZWRTY3JpcHQ+IElkVG9Jbmpl
Y3RlZFNjcmlwdE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMzAwNWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBA
IC0wLDAgKzEsMTQxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRPTVdyYXBw
ZXJXb3JsZC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRIb3N0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckNTU0FnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2xpZW50LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlQWdlbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTZXR0
aW5ncy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJSYW5n
ZS5oIgorI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTY3JpcHRBcmd1
bWVudHMuaCIKKyNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKKyNpbmNsdWRlICJTY3JpcHRG
dW5jdGlvbkNhbGwuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3Jp
cHRQcm9maWxlLmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKKyNpbmNsdWRlICJTY3Jp
cHRTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCisj
aWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudC5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
CisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiCisjaW5jbHVkZSAiU3RvcmFn
ZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCisjaW5jbHVkZSAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyNpbmNsdWRlICJJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3Rk
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFn
ZW50OjpFbGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3Bl
Y3RvckFnZW50OjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7Citjb25zdCBjaGFyKiBjb25zdCBJ
bnNwZWN0b3JBZ2VudDo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOworY29uc3QgY2hhciogY29u
c3QgSW5zcGVjdG9yQWdlbnQ6OlByb2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOworCitJbnNwZWN0
b3JBZ2VudDo6SW5zcGVjdG9yQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlciwgUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2lu
c3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAsIG1faW5zcGVjdGVk
UGFnZShwYWdlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9vcGVuaW5nRnJvbnRl
bmQoZmFsc2UpCisgICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQorICAg
ICwgbV9zdGF0ZShuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KSkKKyAgICAsIG1faW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQor
ICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhp
cykpCisgICAgLCBtX2NvbnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMp
KQorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgICwgbV9hdHRhY2hEZWJ1Z2dl
cldoZW5TaG93bihmYWxzZSkKKyAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpjcmVhdGUodGhpcykpCisjZW5kaWYKK3sKKyAgICBBU1NFUlRfQVJHKHBhZ2UsIHBh
Z2UpOworICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOworfQorCitJbnNwZWN0b3JBZ2Vu
dDo6fkluc3BlY3RvckFnZW50KCkKK3sKKyAgICAvLyBUaGVzZSBzaG91bGQgaGF2ZSBiZWVuIGNs
ZWFyZWQgaW4gaW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpLgorICAgIEFTU0VSVCghbV9jbGllbnQp
OworICAgIEFTU0VSVCghbV9pbnNwZWN0ZWRQYWdlKTsKKyAgICBBU1NFUlQoIW1faGlnaGxpZ2h0
ZWROb2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3ll
ZCgpCit7CisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmRpc2Nvbm5l
Y3RGcm9tQmFja2VuZCgpOworCisgICAgaGlkZUhpZ2hsaWdodCgpOworCisjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCisgICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7CisgICAgbV9i
cm93c2VyRGVidWdnZXJBZ2VudC5jbGVhcigpOworI2VuZGlmCisKKyAgICBBU1NFUlQobV9pbnNw
ZWN0ZWRQYWdlKTsKKyAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOworCisgICAgcmVsZWFzZUZyb250
ZW5kTGlmZXRpbWVBZ2VudHMoKTsKKyAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVj
dENvbnRyb2xsZXIoKTsKKworICAgIG1fY2xpZW50LT5pbnNwZWN0b3JEZXN0cm95ZWQoKTsKKyAg
ICBtX2NsaWVudCA9IDA7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZWQoKSBjb25z
dAoreworICAgIGlmICghbV9pbnNwZWN0ZWRQYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+c2V0dGluZ3MoKS0+ZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCgpOworfQorCitib29sIEluc3BlY3RvckFnZW50OjppbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZCgpCit7CisgICAgcmV0dXJuIG1fc2V0dGluZ3MtPmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGlu
Z3M6Okluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKK3sKKyAgICBtX3NldHRp
bmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpJbnNwZWN0b3JTdGFydHNBdHRhY2hl
ZCwgYXR0YWNoZWQpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzZXRJbnNwZWN0b3JBdHRh
Y2hlZEhlaWdodChsb25nIGhlaWdodCkKK3sKKyAgICBtX3NldHRpbmdzLT5zZXRMb25nKEluc3Bl
Y3RvclNldHRpbmdzOjpJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCwgaGVpZ2h0KTsKK30KKworbG9u
ZyBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBjb25zdAoreworICAg
IHJldHVybiBtX3NldHRpbmdzLT5nZXRMb25nKEluc3BlY3RvclNldHRpbmdzOjpJbnNwZWN0b3JB
dHRhY2hlZEhlaWdodCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OnNlYXJjaGluZ0Zvck5v
ZGVJblBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3Bl
Y3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0
YXRlQ29va2llKQoreworICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2llKGlu
c3BlY3RvclN0YXRlQ29va2llKTsKKworICAgIGlmICghbV9mcm9udGVuZCkgeworICAgICAgICBj
b25uZWN0RnJvbnRlbmQoKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZnJvbnRlbmRSZXVzZWQoKTsK
KyAgICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKS5z
dHJpbmcoKSk7CisgICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOworICAgICAgICBwdXNoRGF0YUNvbGxlY3RlZE9m
ZmxpbmUoKTsKKyAgICB9CisKKyAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50OjpyZXN0b3JlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVu
ZC5nZXQoKSk7CisKKyAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6
dGltZWxpbmVQcm9maWxlckVuYWJsZWQpKQorICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIo
KTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHJlc3RvcmVEZWJ1Z2dl
cigpOworICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVSZXNldEFnZW50KTsKKyAg
ICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRpYXRlZFBy
b2ZpbGluZykpCisgICAgICAgIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOworI2VuZGlm
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2hvdygpOworCisgICAgaWYg
KG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBl
KCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkKKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKKyAgICBtX25vZGVUb0ZvY3VzID0gbm9kZTsKKworICAgIGlmICghbV9mcm9udGVuZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9jdXNOb2RlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
QWdlbnQ6OmZvY3VzTm9kZSgpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7
CisKKyAgICBsb25nIGlkID0gbV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtX25v
ZGVUb0ZvY3VzLmdldCgpKTsKKyAgICBtX2Zyb250ZW5kLT51cGRhdGVGb2N1c2VkTm9kZShpZCk7
CisgICAgbV9ub2RlVG9Gb2N1cyA9IDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hs
aWdodChOb2RlKiBub2RlKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUX0FSRyhub2RlLCBub2RlKTsKKyAgICBtX2hpZ2hsaWdodGVkTm9kZSA9IG5v
ZGU7CisgICAgbV9jbGllbnQtPmhpZ2hsaWdodChub2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JB
Z2VudDo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0g
MDsKKyAgICBpZiAobV9kb21BZ2VudCAmJiAobm9kZSA9IG1fZG9tQWdlbnQtPm5vZGVGb3JJZChu
b2RlSWQpKSkKKyAgICAgICAgaGlnaGxpZ2h0KG5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpoaWdobGlnaHRGcmFtZSh1bnNpZ25lZCBsb25nIGZyYW1lSWQpCit7CisgICAgRnJhbWUq
IG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7CisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dChtYWluRnJhbWUpKSB7CisgICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oZnJhbWUpID09IGZyYW1lSWQgJiYgZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBoaWdobGlnaHQoZnJhbWUtPm93bmVyRWxlbWVudCgpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlkZUhp
Z2hsaWdodCgpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2hpZ2hsaWdodGVkTm9kZSA9IDA7CisgICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JBZ2VudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSB8fCAh
c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBOb2RlKiBu
b2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIHdoaWxlIChub2RlICYmIG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFKQorICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgIGlmIChub2RlKQorICAgICAgICBoaWdobGlnaHQobm9kZSk7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQoreworICAgIGlmICghZW5hYmxlZCgp
IHx8ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChtX2hpZ2hsaWdodGVkTm9kZSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9
IG1faGlnaGxpZ2h0ZWROb2RlOworICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsK
KyAgICAgICAgaW5zcGVjdChub2RlLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NP
d25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1f
aW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQg
PSBjbGllbnQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENsZWFyV2luZG93T2JqZWN0
SW5Xb3JsZChGcmFtZSogZnJhbWUsIERPTVdyYXBwZXJXb3JsZCogd29ybGQpCit7CisgICAgaWYg
KHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBJZiB0aGUgcGFnZSBpcyBzdXBwb3NlZCB0byBzZXJ2ZSBhcyBJbnNwZWN0b3JGcm9udGVu
ZCBub3RpZnkgaW5zcGV0b3IgZnJvbnRlbmQKKyAgICAvLyBjbGllbnQgdGhhdCBpdCdzIGNsZWFy
ZWQgc28gdGhhdCB0aGUgY2xpZW50IGNhbiBleHBvc2UgaW5zcGVjdG9yIGJpbmRpbmdzLgorICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50ICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCkpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQtPndpbmRv
d09iamVjdENsZWFyZWQoKTsKKworICAgIGlmIChlbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1f
ZnJvbnRlbmQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAg
ICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7Cisg
ICAgICAgIGlmIChtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLnNpemUoKSkgeworICAgICAgICAg
ICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUp
OworICAgICAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX3Njcmlw
dHNUb0V2YWx1YXRlT25Mb2FkLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGl0ICE9IG1fc2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBtX2lu
amVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0U2NyaXB0KCppdCwgc2NyaXB0U3RhdGUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9pbnNwZWN0b3JFeHRlbnNpb25B
UEkuaXNFbXB0eSgpKQorICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+aW5qZWN0U2NyaXB0
KG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJLCBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSkpOwor
fQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBpZiAoc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpID09IGVuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFy
Y2hpbmdGb3JOb2RlLCBlbmFibGVkKTsKKyAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgIGhpZGVI
aWdobGlnaHQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9k
ZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQoreworICAgICpuZXdTdGF0ZSA9IGVuYWJs
ZWQ7CisgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKK30KKwordm9pZCBJbnNwZWN0
b3JBZ2VudDo6Y29ubmVjdEZyb250ZW5kKCkKK3sKKyAgICBtX29wZW5pbmdGcm9udGVuZCA9IGZh
bHNlOworICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CisgICAgbV9mcm9udGVu
ZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7CisgICAgbV9kb21BZ2VudCA9IElu
c3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCksIG1fZnJv
bnRlbmQuZ2V0KCkpOworICAgIG1fcnVudGltZUFnZW50ID0gSW5zcGVjdG9yUnVudGltZUFnZW50
OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCkpOworICAgIG1fY3NzQWdlbnQtPnNl
dERPTUFnZW50KG1fZG9tQWdlbnQuZ2V0KCkpOworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAg
IG1fZGF0YWJhc2VBZ2VudCA9IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmNyZWF0ZSgmbV9kYXRh
YmFzZVJlc291cmNlcywgbV9mcm9udGVuZC5nZXQoKSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKyAgICBtX2RvbVN0b3JhZ2VBZ2VudCA9IEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6Y3JlYXRlKCZtX2RvbVN0b3JhZ2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwor
I2VuZGlmCisKKyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdl
bnQtPnJlc2V0RnJvbnRlbmRQcm94eU9iamVjdChtX2Zyb250ZW5kLmdldCgpKTsKKworICAgIG1f
Y29uc29sZUFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgpKTsKKworICAgIC8vIElu
aXRpYWxpemUgV2ViIEluc3BlY3RvciB0aXRsZS4KKyAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRV
UkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKKworI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCisgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQgPSBuZXcgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOworI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgbV9maWxlU3lzdGVtQWdlbnQgPSBJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsK
KyNlbmRpZgorCisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5k
cygpKQorICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5j
YXVnaHRFeGNlcHRpb25zKHRydWUpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJv
bnRlbmRDcmVhdGVkKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3coKQoreworICAg
IGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9vcGVuaW5nRnJv
bnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICBt
X2Zyb250ZW5kLT5icmluZ1RvRnJvbnQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9vcGVuaW5n
RnJvbnRlbmQgPSB0cnVlOworICAgICAgICBtX2NsaWVudC0+b3Blbkluc3BlY3RvckZyb250ZW5k
KGluc3BlY3RvckNvbnRyb2xsZXIoKSk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckFnZW50
OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc2hvdygpOworCisgICAgaWYgKCFtX2Zyb250ZW5kKSB7
CisgICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHBhbmVsOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fZnJvbnRlbmQtPnNob3dQYW5lbChwYW5lbCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmNsb3NlKCkKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKKyAgICBkaXNjb25u
ZWN0RnJvbnRlbmQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzY29ubmVjdEZyb250
ZW5kKCkKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZnJvbnRlbmQuY2xlYXIoKTsKKworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJvbnRl
bmREZWxldGVkKCk7CisgICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250
ZW5kcygpKQorICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0dXJlQ2FsbFN0YWNrRm9y
VW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQorICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgYmVpbmcgY2xvc2VkIHdpdGggdGhlIGRlYnVn
Z2VyIGVuYWJsZWQsCisgICAgLy8gcmVtZW1iZXIgdGhpcyBzdGF0ZSB0byByZS1lbmFibGUgZGVi
dWdnZXIgb24gdGhlIG5leHQgd2luZG93CisgICAgLy8gb3BlbmluZy4KKyAgICBib29sIGRlYnVn
Z2VyV2FzRW5hYmxlZCA9IGRlYnVnZ2VyRW5hYmxlZCgpOworICAgIGRpc2FibGVEZWJ1Z2dlcigp
OworICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBkZWJ1Z2dlcldhc0VuYWJsZWQ7Cisj
ZW5kaWYKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKKyAgICB1bmJpbmRBbGxSZXNv
dXJjZXMoKTsKKyAgICBzdG9wVGltZWxpbmVQcm9maWxlcigpOworCisgICAgaGlkZUhpZ2hsaWdo
dCgpOworCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgbV9wcm9maWxlckFn
ZW50LT5zZXRGcm9udGVuZCgwKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0b3BVc2VySW5pdGlh
dGVkUHJvZmlsaW5nKHRydWUpOworI2VuZGlmCisgICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250
ZW5kKDApOworCisgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKKyAgICBtX3Rp
bWVsaW5lQWdlbnQuY2xlYXIoKTsKKyAgICBtX2V4dHJhSGVhZGVycy5jbGVhcigpOworfQorCitJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2VudCgpCit7
CisgICAgaWYgKCFtX3Jlc291cmNlQWdlbnQgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgbV9yZXNv
dXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFn
ZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgcmV0dXJuIG1fcmVzb3Vy
Y2VBZ2VudC5nZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5k
TGlmZXRpbWVBZ2VudHMoKQoreworICAgIG1fcmVzb3VyY2VBZ2VudC5jbGVhcigpOworICAgIG1f
cnVudGltZUFnZW50LmNsZWFyKCk7CisKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBpbnZva2VkIHBy
aW9yIHRvIG1fZG9tQWdlbnQgZGVzdHJ1Y3Rpb24uCisgICAgbV9jc3NBZ2VudC0+c2V0RE9NQWdl
bnQoMCk7CisKKyAgICAvLyBtX2RvbUFnZW50IGlzIFJlZlB0ci4gUmVtb3ZlIERPTSBsaXN0ZW5l
cnMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlCisgICAgLy8gbm8gcmVmZXJlbmNlcyB0
byB0aGUgRE9NIGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgorICAgIGlmIChtX2RvbUFnZW50KQor
ICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOworICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKKwor
I2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBpZiAobV9kYXRhYmFzZUFnZW50KQorICAgICAgICBt
X2RhdGFiYXNlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKKyAgICBtX2RhdGFiYXNlQWdlbnQuY2xl
YXIoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIG1fZG9tU3RvcmFn
ZUFnZW50LmNsZWFyKCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCisgICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuY2xlYXIoKTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAgIGlmIChtX2ZpbGVTeXN0ZW1BZ2VudCkKKyAgICAg
ICAgbV9maWxlU3lzdGVtQWdlbnQtPnN0b3AoKTsKKyAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQu
Y2xlYXIoKTsKKyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlw
dE9iamVjdHMoKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyAgICBpZiAoIW1fZnJvbnRl
bmQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9zaG93QWZ0ZXJWaXNpYmxlLmlzRW1w
dHkoKSkgeworICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKKyAgICAgICAg
bV9zaG93QWZ0ZXJWaXNpYmxlID0gIiI7CisgICAgfQorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgaWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpKQorICAgICAgICBt
X2Zyb250ZW5kLT5wcm9maWxlcldhc0VuYWJsZWQoKTsKKyNlbmRpZgorCisgICAgcHVzaERhdGFD
b2xsZWN0ZWRPZmZsaW5lKCk7CisKKyAgICBpZiAobV9ub2RlVG9Gb2N1cykKKyAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICAvLyBEaXNwYXRjaCBwZW5kaW5nIGZyb250ZW5kIGNvbW1hbmRzCisg
ICAgZm9yIChWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nRXZhbHVhdGVU
ZXN0Q29tbWFuZHMuZW5kKCk7ICsraXQpCisgICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCk7CisgICAgbV9wZW5kaW5n
RXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKKworICAgIHJlc3RvcmVEZWJ1Z2dlcigpOwor
ICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVOb0FjdGlvbik7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpCit7CisgICAgbV9kb21B
Z2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQo
KSk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9y
IChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+
YmluZChtX2Zyb250ZW5kLmdldCgpKTsKKyNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
KyAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9t
U3RvcmFnZUVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kLmdl
dCgpKTsKKyNlbmRpZgorI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUo
V09SS0VSUykKKyAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJzRW5kID0gbV93b3JrZXJz
LmVuZCgpOworICAgIGZvciAoV29ya2Vyc01hcDo6aXRlcmF0b3IgaXQgPSBtX3dvcmtlcnMuYmVn
aW4oKTsgaXQgIT0gd29ya2Vyc0VuZDsgKytpdCkgeworICAgICAgICBJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZSogd29ya2VyID0gaXQtPnNlY29uZC5nZXQoKTsKKyAgICAgICAgbV9mcm9udGVuZC0+
ZGlkQ3JlYXRlV29ya2VyKHdvcmtlci0+aWQoKSwgd29ya2VyLT51cmwoKSwgd29ya2VyLT5pc1No
YXJlZFdvcmtlcigpKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
cmVzdG9yZURlYnVnZ2VyKCkKK3sKKyAgICBBU1NFUlQobV9mcm9udGVuZCk7CisjaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgaWYgKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omlz
RGVidWdnZXJBbHdheXNFbmFibGVkKCkgfHwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biB8fCBt
X3NldHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFsd2F5c0Vu
YWJsZWQpKSB7CisgICAgICAgIGVuYWJsZURlYnVnZ2VyKGZhbHNlKTsKKyAgICAgICAgbV9hdHRh
Y2hEZWJ1Z2dlcldoZW5TaG93biA9IGZhbHNlOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIElu
c3BlY3RvckFnZW50OjpyZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9uIGFjdGlv
bikKK3sKKyAgICBBU1NFUlQobV9mcm9udGVuZCk7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCisgICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgp
KTsKKyAgICBpZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpICYm
IG1fc2V0dGluZ3MtPmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OlByb2ZpbGVyQWx3YXlz
RW5hYmxlZCkpCisgICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7CisgICAgaWYgKGFjdGlvbiA9PSBQ
cm9maWxlclJlc3RvcmVSZXNldEFnZW50KQorICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnJlc2V0
RnJvbnRlbmRQcm9maWxlcygpOworI2VuZGlmCit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnVu
YmluZEFsbFJlc291cmNlcygpCit7CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIERhdGFiYXNl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2Vz
LmVuZCgpOworICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCisgICAg
ICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBt
X2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBk
b21TdG9yYWdlRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKKyNlbmRp
ZgorICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCisgICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVz
ZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExv
YWRlciogbG9hZGVyKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZENv
bW1pdExvYWQobG9hZGVyKTsKKyAgICAKKyAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKKwor
ICAgIGlmIChsb2FkZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkg
eworICAgICAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmluc3Bl
Y3RlZFVSTENoYW5nZWQobG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7CisKKyAgICAgICAgbV9pbmpl
Y3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKKyAgICAgICAgbV9jb25z
b2xlQWdlbnQtPnJlc2V0KCk7CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAg
ICAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkgeworICAgICAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5jbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CisgICAgICAgICAgICBpZiAobV9icm93c2VyRGVi
dWdnZXJBZ2VudCkKKyAgICAgICAgICAgICAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LT5pbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKKyAgICAgICAgbV9wcm9m
aWxlckFnZW50LT5zdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyh0cnVlKTsKKyAgICAgICAgbV9w
cm9maWxlckFnZW50LT5yZXNldFN0YXRlKCk7CisjZW5kaWYKKworICAgICAgICAvLyB1bmJpbmRB
bGxSZXNvdXJjZXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZGF0YWJhc2UgYW5kIERPTSBzdG9y
YWdlCisgICAgICAgIC8vIHJlc291cmNlcyBhcmUgY2xlYXJlZCBzbyB0aGF0IGl0IGhhcyBhIGNo
YW5jZSB0byB1bmJpbmQgdGhlbS4KKyAgICAgICAgdW5iaW5kQWxsUmVzb3VyY2VzKCk7CisKKyAg
ICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc2V0KCk7
CisgICAgICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOworICAgICAgICAgICAgbV9jc3NBZ2Vu
dC0+cmVzZXQoKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShXT1JLRVJTKQorICAgICAgICBtX3dv
cmtlcnMuY2xlYXIoKTsKKyNlbmRpZgorI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgbV9k
YXRhYmFzZVJlc291cmNlcy5jbGVhcigpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorICAgICAgICBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuY2xlYXIoKTsKKyNlbmRpZgorCisgICAg
ICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICAgICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQo
bV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgfQorfQorCit2
b2lkIEluc3BlY3RvckFnZW50OjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChEb2N1
bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCFlbmFibGVk
KCkgfHwgIWlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgdXJsKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKKyAgICAgICAgbV90aW1lbGluZUFnZW50LT5k
aWRNYXJrRE9NQ29udGVudEV2ZW50KCk7CisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1f
ZnJvbnRlbmQtPmRvbUNvbnRlbnRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOworfQorCit2b2lk
IEluc3BlY3RvckFnZW50OjptYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRl
ciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIWlz
TWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgdXJsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fdGltZWxpbmVBZ2VudCkKKyAgICAgICAgbV90aW1lbGluZUFnZW50LT5kaWRNYXJrTG9h
ZEV2ZW50KCk7CisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmxvYWRF
dmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOworfQorCitib29sIEluc3BlY3RvckFnZW50Ojppc01h
aW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiByZXF1
ZXN0VXJsKQoreworICAgIHJldHVybiBsb2FkZXItPmZyYW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKSAmJiByZXF1ZXN0VXJsID09IGxvYWRlci0+cmVxdWVzdFVSTCgpOworfQor
Cit2b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobV9mcm9udGVuZCkgeworICAgICAgICAvLyBPbmx5IGVuYWJsZSBsb2FkIHRpbWluZyBhbmQg
cmF3IGhlYWRlcnMgaWYgZnJvbnQtZW5kIGlzIGF0dGFjaGVkLCBhcyBvdGhlcndpc2Ugd2UgbWF5
IHByb2R1Y2Ugb3ZlcmhlYWQuCisgICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0TG9hZFRpbWluZyh0
cnVlKTsKKyAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOworCisgICAg
ICAgIGlmIChtX2V4dHJhSGVhZGVycykgeworICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYUhlYWRlcnMtPmVuZCgpOworICAgICAgICAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fZXh0cmFIZWFkZXJzLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5zdXJlU2V0dGluZ3NMb2FkZWQoKQoreworICAgIGlmICht
X3NldHRpbmdzKQorICAgICAgICByZXR1cm47CisgICAgbV9zZXR0aW5ncyA9IG5ldyBJbnNwZWN0
b3JTZXR0aW5ncyhtX2NsaWVudCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6bW9uaXRvcmluZ1hIUiwgbV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0
aW5nczo6TW9uaXRvcmluZ1hIUkVuYWJsZWQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
c3RhcnRUaW1lbGluZVByb2ZpbGVyKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV90aW1lbGluZUFnZW50ID0gbmV3IEluc3BlY3RvclRpbWVsaW5lQWdlbnQobV9mcm9udGVu
ZC5nZXQoKSk7CisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVs
aW5lUHJvZmlsZXJXYXNTdGFydGVkKCk7CisKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3Bl
Y3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgdHJ1ZSk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3RpbWVsaW5lQWdlbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7CisgICAgaWYgKG1fZnJvbnRlbmQp
CisgICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7CisKKyAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCwgZmFsc2UpOworfQorCisjaWYgRU5BQkxFKFdPUktFUlMpCitjbGFzcyBQb3N0V29ya2Vy
Tm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JBZ2VudDo6V29ya2VyQWN0aW9uIGFjdGlvbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRU
YXNrKHdvcmtlciwgYWN0aW9uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUG9zdFdvcmtlck5v
dGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3Vy
Y2U+IHdvcmtlciwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckFjdGlvbiBhY3Rpb24pCisgICAgICAg
IDogbV93b3JrZXIod29ya2VyKQorICAgICAgICAsIG1fYWN0aW9uKGFjdGlvbikKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoc2NyaXB0Q29udGV4dC0+aXNE
b2N1bWVudCgpKSB7CisgICAgICAgICAgICBpZiAoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvciA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0Q29udGV4dCktPnBhZ2UoKS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgIGluc3BlY3Rvci0+cG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiBtX3dvcmtl
cjsKKyAgICBJbnNwZWN0b3JBZ2VudDo6V29ya2VyQWN0aW9uIG1fYWN0aW9uOworfTsKKwordm9p
ZCBJbnNwZWN0b3JBZ2VudDo6cG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoY29uc3Qg
SW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmIHdvcmtlciwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckFj
dGlvbiBhY3Rpb24pCit7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAgICAgICByZXR1cm47Cisj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAg
ICBjYXNlIEluc3BlY3RvckFnZW50OjpXb3JrZXJDcmVhdGVkOgorICAgICAgICBtX2Zyb250ZW5k
LT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLmlkKCksIHdvcmtlci51cmwoKSwgd29ya2VyLmlzU2hh
cmVkV29ya2VyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluc3BlY3RvckFnZW50OjpX
b3JrZXJEZXN0cm95ZWQ6CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZERlc3Ryb3lXb3JrZXIod29y
a2VyLmlkKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBJbnNw
ZWN0b3JBZ2VudDo6ZGlkQ3JlYXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVy
bCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJSZXNv
dXJjZShJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVkV29y
a2VyKSk7CisgICAgbV93b3JrZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOworICAgIGlmICht
X2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlvblRv
RnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UsIEluc3BlY3RvckFnZW50OjpXb3Jr
ZXJDcmVhdGVkKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZERlc3Ryb3lXb3JrZXIo
aW50cHRyX3QgaWQpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlclJlc291cmNlID0gbV93b3JrZXJzLmZpbmQo
aWQpOworICAgIGlmICh3b3JrZXJSZXNvdXJjZSA9PSBtX3dvcmtlcnMuZW5kKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAobV9pbnNwZWN0ZWRQYWdlICYmIG1fZnJvbnRlbmQpCisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnBvc3RUYXNrKFBvc3RX
b3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6Y3JlYXRlKHdvcmtlclJlc291cmNlLT5z
ZWNvbmQsIEluc3BlY3RvckFnZW50OjpXb3JrZXJEZXN0cm95ZWQpKTsKKyAgICBtX3dvcmtlcnMu
cmVtb3ZlKHdvcmtlclJlc291cmNlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKwor
I2lmIEVOQUJMRShEQVRBQkFTRSkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZE9wZW5EYXRhYmFz
ZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQoreworICAgIGlmICghZW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpjcmVhdGUoZGF0
YWJhc2UsIGRvbWFpbiwgbmFtZSwgdmVyc2lvbik7CisKKyAgICBtX2RhdGFiYXNlUmVzb3VyY2Vz
LnNldChyZXNvdXJjZS0+aWQoKSwgcmVzb3VyY2UpOworCisgICAgLy8gUmVzb3VyY2VzIGFyZSBv
bmx5IGJvdW5kIHdoaWxlIHZpc2libGUuCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIHJl
c291cmNlLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworfQorI2VuZGlmCisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmdldENvb2tpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29va2llcywgV1RG
OjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCit7CisgICAgLy8gSWYgd2UgY2FuIGdldCByYXcgY29v
a2llcy4KKyAgICBMaXN0SGFzaFNldDxDb29raWU+IHJhd0Nvb2tpZXNMaXN0OworCisgICAgLy8g
SWYgd2UgY2FuJ3QgZ2V0IHJhdyBjb29raWVzIC0gZmFsbCBiYWNrIHRvIFN0cmluZyByZXByZXNl
bnRhdGlvbgorICAgIFN0cmluZyBzdHJpbmdDb29raWVzTGlzdDsKKworICAgIC8vIFJldHVybiB2
YWx1ZSB0byBnZXRSYXdDb29raWVzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgY2FsbCBi
ZWNhdXNlCisgICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBwbGF0Zm9ybS9uZXR3b3JrIGJhY2tl
bmQgc3BlY2lmaWMsIGFuZCB0aGUgY2FsbCB3aWxsCisgICAgLy8gYWx3YXlzIHJldHVybiB0aGUg
c2FtZSB0cnVlL2ZhbHNlIHZhbHVlLgorICAgIGJvb2wgcmF3Q29va2llc0ltcGxlbWVudGVkID0g
ZmFsc2U7CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZy
YW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpKSkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRv
Y3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291
cmNlcy5lbmQoKTsKKyAgICAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRS
ZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29raWVzTGlz
dDsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tpZXMoZG9j
dW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBpdC0+c2Vjb25kLT51cmwoKSksIGRvY0Nvb2tp
ZXNMaXN0KTsKKworICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3Ig
dGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgorICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgICAgIHN0cmluZ0Nvb2tpZXNMaXN0ICs9
IGRvY3VtZW50LT5jb29raWUoZWMpOworICAgICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbnMgYXJl
IHRocm93biBieSBjb29raWUoKSBpbiBzYW5kYm94ZWQgZnJhbWVzLiBUaGF0IHdvbid0IGhhcHBl
biBoZXJlCisgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSAiZG9jdW1lbnQiIGlzIHRoZSBkb2N1
bWVudCBvZiB0aGUgbWFpbiBmcmFtZSBvZiB0aGUgcGFnZS4KKyAgICAgICAgICAgICAgICBBU1NF
UlQoIWVjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvb2tp
ZXNTaXplID0gZG9jQ29va2llc0xpc3Quc2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY29va2llc1NpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IXJhd0Nvb2tpZXNMaXN0LmNvbnRhaW5zKGRvY0Nvb2tpZXNMaXN0W2ldKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJhd0Nvb2tpZXNMaXN0LmFkZChkb2NDb29raWVzTGlzdFtpXSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkKKyAgICAgICAgKmNvb2tpZXMgPSBidWlsZEFycmF5Rm9y
Q29va2llcyhyYXdDb29raWVzTGlzdCk7CisgICAgZWxzZQorICAgICAgICAqY29va2llc1N0cmlu
ZyA9IHN0cmluZ0Nvb2tpZXNMaXN0OworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJ
bnNwZWN0b3JBZ2VudDo6YnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYg
Y29va2llc0xpc3QpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb29raWVzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0
b3IgZW5kID0gY29va2llc0xpc3QuZW5kKCk7CisgICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRl
cmF0b3IgaXQgPSBjb29raWVzTGlzdC5iZWdpbigpOworICAgIGZvciAoaW50IGkgPSAwOyBpdCAh
PSBlbmQ7ICsraXQsIGkrKykKKyAgICAgICAgY29va2llcy0+cHVzaE9iamVjdChidWlsZE9iamVj
dEZvckNvb2tpZSgqaXQpKTsKKworICAgIHJldHVybiBjb29raWVzOworfQorCitQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ29va2llKGNv
bnN0IENvb2tpZSYgY29va2llKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICB2YWx1ZS0+c2V0U3RyaW5nKCJuYW1l
IiwgY29va2llLm5hbWUpOworICAgIHZhbHVlLT5zZXRTdHJpbmcoInZhbHVlIiwgY29va2llLnZh
bHVlKTsKKyAgICB2YWx1ZS0+c2V0U3RyaW5nKCJkb21haW4iLCBjb29raWUuZG9tYWluKTsKKyAg
ICB2YWx1ZS0+c2V0U3RyaW5nKCJwYXRoIiwgY29va2llLnBhdGgpOworICAgIHZhbHVlLT5zZXRO
dW1iZXIoImV4cGlyZXMiLCBjb29raWUuZXhwaXJlcyk7CisgICAgdmFsdWUtPnNldE51bWJlcigi
c2l6ZSIsIChjb29raWUubmFtZS5sZW5ndGgoKSArIGNvb2tpZS52YWx1ZS5sZW5ndGgoKSkpOwor
ICAgIHZhbHVlLT5zZXRCb29sZWFuKCJodHRwT25seSIsIGNvb2tpZS5odHRwT25seSk7CisgICAg
dmFsdWUtPnNldEJvb2xlYW4oInNlY3VyZSIsIGNvb2tpZS5zZWN1cmUpOworICAgIHZhbHVlLT5z
ZXRCb29sZWFuKCJzZXNzaW9uIiwgY29va2llLnNlc3Npb24pOworICAgIHJldHVybiB2YWx1ZTsK
K30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkpIHsKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgICAgIGlmIChk
b2N1bWVudC0+dXJsKCkuaG9zdCgpICE9IGRvbWFpbikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYg
YWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmFsbENhY2hl
ZFJlc291cmNlcygpOworICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNv
dXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2VzLmVuZCgpOworICAgICAg
ICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCBpdC0+c2Vjb25kLT51cmwoKSksIGNvb2tpZU5hbWUpOworICAgIH0KK30KKworI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2Uo
U3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJh
bWUpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERPTVN0
b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VS
ZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRv
ciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5k
OyArK2l0KQorICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUs
IGlzTG9jYWxTdG9yYWdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxTdG9y
YWdlPiBkb21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3Rv
cmFnZSwgZnJhbWUpOworCisgICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLnNldChyZXNvdXJjZS0+
aWQoKSwgcmVzb3VyY2UpOworCisgICAgLy8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxl
IHZpc2libGUuCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIHJlc291cmNlLT5iaW5kKG1f
ZnJvbnRlbmQuZ2V0KCkpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCit2
b2lkIEluc3BlY3RvckFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCkK
K3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2lu
c3BlY3RlZFBhZ2UpOworCisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNv
dXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRpZmllciwgcmVxdWVzdFVSTCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50VVJMKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBpZiAo
bV9yZXNvdXJjZUFnZW50KQorICAgICAgICBtX3Jlc291cmNlQWdlbnQtPndpbGxTZW5kV2ViU29j
a2V0SGFuZHNoYWtlUmVxdWVzdChpZGVudGlmaWVyLCByZXF1ZXN0KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2Vu
dC0+ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3Bv
bnNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAg
IG1fcmVzb3VyY2VBZ2VudC0+ZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCitib29sIEluc3BlY3RvckFnZW50Ojppc1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9maWxlckFnZW50LT5pc1JlY29yZGluZ1VzZXJJ
bml0aWF0ZWRQcm9maWxlKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnN0YXJ0VXNlcklu
aXRpYXRlZFByb2ZpbGluZygpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwor
ICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcsIHRydWUpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzdG9wVXNlckluaXRpYXRl
ZFByb2ZpbGluZygpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3Byb2ZpbGVyQWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgbV9z
dGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRpYXRlZFByb2ZpbGluZywg
ZmFsc2UpOworfQorCitib29sIEluc3BlY3RvckFnZW50Ojpwcm9maWxlckVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBlbmFibGVkKCkgJiYgbV9wcm9maWxlckFnZW50LT5lbmFibGVkKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBi
b29sIHNraXBSZWNvbXBpbGUpCit7CisgICAgaWYgKGFsd2F5cykKKyAgICAgICAgbV9zZXR0aW5n
cy0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6UHJvZmlsZXJBbHdheXNFbmFibGVkLCB0
cnVlKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzKQoreworICAg
IGlmIChhbHdheXMpCisgICAgICAgIG1fc2V0dGluZ3MtPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0
dGluZ3M6OlByb2ZpbGVyQWx3YXlzRW5hYmxlZCwgZmFsc2UpOworICAgIG1fcHJvZmlsZXJBZ2Vu
dC0+ZGlzYWJsZSgpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpCit7CisgICAg
aWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZWJ1Z2dlckVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2Zyb250ZW5kKSB7CisgICAgICAg
IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSB0cnVlOworICAgICAgICBzaG93UGFuZWwoU2Ny
aXB0c1BhbmVsKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZW5hYmxlRGVidWdnZXIoZmFsc2UpOwor
fQorCit2b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKK3sK
KyAgICBBU1NFUlQoIWRlYnVnZ2VyRW5hYmxlZCgpKTsKKyAgICBpZiAoYWx3YXlzKQorICAgICAg
ICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFsd2F5
c0VuYWJsZWQsIHRydWUpOworCisgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CisKKyAgICBt
X2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9m
cm9udGVuZC5nZXQoKSk7CisgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcyk7CisgICAgbV9icm93c2VyRGVidWdnZXJB
Z2VudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKSk7CisKKyAgICBtX2Zyb250
ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlz
YWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoYWx3YXlzKQorICAgICAgICBtX3NldHRpbmdzLT5zZXRCb29s
ZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIGZhbHNlKTsKKwor
ICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOworCisgICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFy
KCk7CisgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC5jbGVhcigpOworCisgICAgbV9hdHRhY2hE
ZWJ1Z2dlcldoZW5TaG93biA9IGZhbHNlOworCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAg
IG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JB
Z2VudDo6cmVzdW1lKCkKK3sKKyAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQorICAgICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzZXRBbGxC
cm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRz
KQoreworICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFr
cG9pbnRzLCBicmVha3BvaW50cyk7Cit9CisjZW5kaWYKKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3Jp
cHQpCit7CisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQpOworICAgIGVsc2UKKyAgICAgICAgbV9w
ZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuYXBwZW5kKHBhaXI8bG9uZywgU3RyaW5nPihjYWxs
SWQsIHNjcmlwdCkpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRFdmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpCit7Cisg
ICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tUGFnZShkZWJ1Z2dl
cldvcmxkKCksIG1faW5zcGVjdGVkUGFnZSk7CisgICAgU2NyaXB0T2JqZWN0IHdpbmRvdzsKKyAg
ICBTY3JpcHRHbG9iYWxPYmplY3Q6OmdldChzY3JpcHRTdGF0ZSwgIndpbmRvdyIsIHdpbmRvdyk7
CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHdpbmRvdywgImRpZEV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwor
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGpzb25SZXN1bHQpOworICAgIGZ1bmN0aW9uLmNh
bGwoKTsKK30KKworc3RhdGljIFBhdGggcXVhZFRvUGF0aChjb25zdCBGbG9hdFF1YWQmIHF1YWQp
Cit7CisgICAgUGF0aCBxdWFkUGF0aDsKKyAgICBxdWFkUGF0aC5tb3ZlVG8ocXVhZC5wMSgpKTsK
KyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wMigpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5l
VG8ocXVhZC5wMygpKTsKKyAgICBxdWFkUGF0aC5hZGRMaW5lVG8ocXVhZC5wNCgpKTsKKyAgICBx
dWFkUGF0aC5jbG9zZVN1YnBhdGgoKTsKKyAgICByZXR1cm4gcXVhZFBhdGg7Cit9CisKK3N0YXRp
YyB2b2lkIGRyYXdPdXRsaW5lZFF1YWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFF1YWQmIHF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCit7CisgICAgc3RhdGljIGNv
bnN0IGludCBvdXRsaW5lVGhpY2tuZXNzID0gMjsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3Igb3V0
bGluZUNvbG9yKDYyLCA4NiwgMTgwLCAyMjgpOworCisgICAgUGF0aCBxdWFkUGF0aCA9IHF1YWRU
b1BhdGgocXVhZCk7CisKKyAgICAvLyBDbGlwIG91dCB0aGUgcXVhZCwgdGhlbiBkcmF3IHdpdGgg
YSAycHggc3Ryb2tlIHRvIGdldCBhIHBpeGVsCisgICAgLy8gb2Ygb3V0bGluZSAoYmVjYXVzZSBp
bmZsYXRpbmcgYSBxdWFkIGlzIGhhcmQpCisgICAgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICAgICAgY29udGV4dC5jbGlwT3V0KHF1YWRQYXRoKTsKKworICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhvdXRsaW5lVGhpY2tuZXNzKTsKKyAgICAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihvdXRsaW5lQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgICAgICBj
b250ZXh0LnN0cm9rZVBhdGgocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRleHQucmVzdG9yZSgp
OworICAgIH0KKworICAgIC8vIE5vdyBkbyB0aGUgZmlsbAorICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKGZpbGxDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgY29udGV4dC5maWxsUGF0
aChxdWFkUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgRmxv
YXRRdWFkJiBjbGlwUXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBjb250ZXh0
LnNhdmUoKTsKKyAgICBQYXRoIGNsaXBRdWFkUGF0aCA9IHF1YWRUb1BhdGgoY2xpcFF1YWQpOwor
ICAgIGNvbnRleHQuY2xpcE91dChjbGlwUXVhZFBhdGgpOworICAgIGRyYXdPdXRsaW5lZFF1YWQo
Y29udGV4dCwgcXVhZCwgZmlsbENvbG9yKTsKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKwor
c3RhdGljIHZvaWQgZHJhd0hpZ2hsaWdodEZvckJveChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UXVhZCYgY29udGVudFF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgcGFkZGluZ1F1
YWQsIGNvbnN0IEZsb2F0UXVhZCYgYm9yZGVyUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBtYXJnaW5R
dWFkKQoreworICAgIHN0YXRpYyBjb25zdCBDb2xvciBjb250ZW50Qm94Q29sb3IoMTI1LCAxNzMs
IDIxNywgMTI4KTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgcGFkZGluZ0JveENvbG9yKDEyNSwg
MTczLCAyMTcsIDE2MCk7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIGJvcmRlckJveENvbG9yKDEy
NSwgMTczLCAyMTcsIDE5Mik7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIG1hcmdpbkJveENvbG9y
KDEyNSwgMTczLCAyMTcsIDIyOCk7CisKKyAgICBpZiAobWFyZ2luUXVhZCAhPSBib3JkZXJRdWFk
KQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgbWFyZ2luUXVhZCwg
Ym9yZGVyUXVhZCwgbWFyZ2luQm94Q29sb3IpOworICAgIGlmIChib3JkZXJRdWFkICE9IHBhZGRp
bmdRdWFkKQorICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgYm9yZGVy
UXVhZCwgcGFkZGluZ1F1YWQsIGJvcmRlckJveENvbG9yKTsKKyAgICBpZiAocGFkZGluZ1F1YWQg
IT0gY29udGVudFF1YWQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0
LCBwYWRkaW5nUXVhZCwgY29udGVudFF1YWQsIHBhZGRpbmdCb3hDb2xvcik7CisKKyAgICBkcmF3
T3V0bGluZWRRdWFkKGNvbnRleHQsIGNvbnRlbnRRdWFkLCBjb250ZW50Qm94Q29sb3IpOworfQor
CitzdGF0aWMgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBsaW5lQm94UXVh
ZHMpCit7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIGxpbmVCb3hDb2xvcigxMjUsIDE3MywgMjE3
LCAxMjgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgp
OyArK2kpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgbGluZUJveFF1YWRzW2ld
LCBsaW5lQm94Q29sb3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udmVydEZyb21GcmFt
ZVRvTWFpbkZyYW1lKEZyYW1lKiBmcmFtZSwgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZWN0ID0g
ZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhmcmFt
ZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlY3QpKTsKK30KKworc3RhdGljIGlubGluZSBJ
bnRTaXplIGZyYW1lVG9NYWluRnJhbWVPZmZzZXQoRnJhbWUqIGZyYW1lKQoreworICAgIEludFBv
aW50IG1haW5GcmFtZVBvaW50ID0gZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+
d2luZG93VG9Db250ZW50cyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KEludFBvaW50
KCkpKTsKKyAgICByZXR1cm4gbWFpbkZyYW1lUG9pbnQgLSBJbnRQb2ludCgpOworfQorCit2b2lk
IEluc3BlY3RvckFnZW50OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1faGlnaGxpZ2h0ZWROb2RlLT5yZW5k
ZXJlcigpOworICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBtX2hpZ2hsaWdodGVkTm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJh
bWVUb01haW5GcmFtZU9mZnNldChjb250YWluaW5nRnJhbWUpOworICAgIEludFJlY3QgYm91bmRp
bmdCb3ggPSByZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CisgICAgYm91
bmRpbmdCb3gubW92ZShtYWluRnJhbWVPZmZzZXQpOworCisgICAgSW50UmVjdCB0aXRsZVJlZmVy
ZW5jZUJveCA9IGJvdW5kaW5nQm94OworCisgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CisK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3
KCk7CisgICAgRmxvYXRSZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0
KCk7CisgICAgaWYgKCFvdmVybGF5UmVjdC5jb250YWlucyhib3VuZGluZ0JveCkgJiYgIWJvdW5k
aW5nQm94LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3Qob3ZlcmxheVJlY3QpKSkKKyAgICAgICAg
b3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKKyAgICBjb250ZXh0LnRy
YW5zbGF0ZSgtb3ZlcmxheVJlY3QueCgpLCAtb3ZlcmxheVJlY3QueSgpKTsKKworICAgIC8vIFJl
bmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29k
ZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJz
b2x1dGVRdWFkcygpLgorI2lmIEVOQUJMRShTVkcpCisgICAgYm9vbCBpc1NWR1JlbmRlcmVyID0g
cmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAh
cmVuZGVyZXItPmlzU1ZHUm9vdCgpOworI2Vsc2UKKyAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBm
YWxzZTsKKyNlbmRpZgorCisgICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpICYmICFpc1NWR1JlbmRl
cmVyKSB7CisgICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVy
ZXIpOworCisgICAgICAgIEludFJlY3QgY29udGVudEJveCA9IHJlbmRlckJveC0+Y29udGVudEJv
eFJlY3QoKTsKKworICAgICAgICBJbnRSZWN0IHBhZGRpbmdCb3goY29udGVudEJveC54KCkgLSBy
ZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRk
aW5nVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkg
KyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBj
b250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gt
PnBhZGRpbmdCb3R0b20oKSk7CisgICAgICAgIEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdCb3gu
eCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94
LT5ib3JkZXJUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0
aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCks
IHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94
LT5ib3JkZXJCb3R0b20oKSk7CisgICAgICAgIEludFJlY3QgbWFyZ2luQm94KGJvcmRlckJveC54
KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+
bWFyZ2luVG9wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgp
ICsgcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCkgKyByZW5kZXJCb3gtPm1hcmdpblJpZ2h0KCksIGJv
cmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+bWFyZ2luVG9wKCkgKyByZW5kZXJCb3gtPm1h
cmdpbkJvdHRvbSgpKTsKKworICAgICAgICB0aXRsZVJlZmVyZW5jZUJveCA9IG1hcmdpbkJveDsK
KyAgICAgICAgdGl0bGVSZWZlcmVuY2VCb3gubW92ZShtYWluRnJhbWVPZmZzZXQpOworICAgICAg
ICB0aXRsZVJlZmVyZW5jZUJveC5tb3ZlKGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgp
KTsKKworICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFk
IGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChwYWRkaW5nQm94KSk7CisgICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVy
Qm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsKKyAgICAgICAg
RmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRSZWN0KG1hcmdpbkJveCkpOworCisgICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFp
bkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZz
ZXQpOworICAgICAgICBhYnNCb3JkZXJRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAg
ICAgYWJzTWFyZ2luUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CisKKyAgICAgICAgZHJhd0hp
Z2hsaWdodEZvckJveChjb250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFi
c0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQpOworICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlz
UmVuZGVySW5saW5lKCkgfHwgaXNTVkdSZW5kZXJlcikgeworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4KKyAgICAgICAg
VmVjdG9yPEZsb2F0UXVhZD4gbGluZUJveFF1YWRzOworICAgICAgICByZW5kZXJlci0+YWJzb2x1
dGVRdWFkcyhsaW5lQm94UXVhZHMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGluZUJveFF1YWRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9
IG1haW5GcmFtZU9mZnNldDsKKworICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JT
VkdSZW5kZXJlcihjb250ZXh0LCBsaW5lQm94UXVhZHMpOworICAgIH0KKworICAgIC8vIERyYXcg
bm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCisKKyAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OlNldHRpbmdz
KiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBkcmF3RWxlbWVu
dFRpdGxlKGNvbnRleHQsIHRpdGxlUmVmZXJlbmNlQm94LCBvdmVybGF5UmVjdCwgc2V0dGluZ3Mp
OworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVj
dCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykgY29uc3QKK3sKKyAg
ICBzdGF0aWMgY29uc3QgaW50IHJlY3RJbmZsYXRlUHggPSA0OworICAgIHN0YXRpYyBjb25zdCBp
bnQgZm9udEhlaWdodFB4ID0gMTI7CisgICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJXaWR0aFB4
ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEJhY2tncm91bmRDb2xvcigyNTUs
IDI1NSwgMTk0LCAyNTUpOworICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQm9yZGVyQ29s
b3IoQ29sb3I6OmJsYWNrKTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEZvbnRDb2xv
cihDb2xvcjo6YmxhY2spOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSk7CisgICAgYm9vbCBpc1hIVE1MID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCk7CisgICAgU3RyaW5nIG5vZGVUaXRs
ZSA9IGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5s
b3dlcigpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElk
QXR0cmlidXRlKCk7CisgICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1w
dHkoKSkgeworICAgICAgICBub2RlVGl0bGUgKz0gIiMiOworICAgICAgICBub2RlVGl0bGUgKz0g
aWRWYWx1ZTsKKyAgICB9CisgICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+
aXNTdHlsZWRFbGVtZW50KCkpIHsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xh
c3NOYW1lc1N0cmluZyA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xh
c3NOYW1lcygpOworICAgICAgICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3Ry
aW5nLnNpemUoKTsKKyAgICAgICAgaWYgKGNsYXNzTmFtZUNvdW50KSB7CisgICAgICAgICAgICBI
YXNoU2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07CisgICAg
ICAgICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHVzZWRDbGFzc05hbWVz
LmFkZChjbGFzc05hbWUpOworICAgICAgICAgICAgICAgIG5vZGVUaXRsZSArPSAiLiI7CisgICAg
ICAgICAgICAgICAgbm9kZVRpdGxlICs9IGNsYXNzTmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIEVsZW1lbnQqIGhpZ2hsaWdodGVkRWxlbWVudCA9IG1faGlnaGxp
Z2h0ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9oaWdo
bGlnaHRlZE5vZGUuZ2V0KCkpIDogMDsKKyAgICBub2RlVGl0bGUgKz0gIiBbIjsKKyAgICBub2Rl
VGl0bGUgKz0gU3RyaW5nOjpudW1iZXIoaGlnaGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0ZWRF
bGVtZW50LT5vZmZzZXRXaWR0aCgpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7CisgICAgbm9kZVRp
dGxlLmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oMHgwMEQ3KSk7IC8vICZ0aW1lczsKKyAgICBu
b2RlVGl0bGUgKz0gU3RyaW5nOjpudW1iZXIoaGlnaGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0
ZWRFbGVtZW50LT5vZmZzZXRIZWlnaHQoKSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKKyAgICBu
b2RlVGl0bGUgKz0gIl0iOworCisgICAgRm9udERlc2NyaXB0aW9uIGRlc2M7CisgICAgRm9udEZh
bWlseSBmYW1pbHk7CisgICAgZmFtaWx5LnNldEZhbWlseShzZXR0aW5ncy0+Zml4ZWRGb250RmFt
aWx5KCkpOworICAgIGRlc2Muc2V0RmFtaWx5KGZhbWlseSk7CisgICAgZGVzYy5zZXRDb21wdXRl
ZFNpemUoZm9udEhlaWdodFB4KTsKKyAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOwor
ICAgIGZvbnQudXBkYXRlKDApOworCisgICAgVGV4dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxl
KTsKKyAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IGJvdW5kaW5nQm94LmJvdHRvbUxlZnQo
KTsKKyAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgp
OworICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlv
blJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkp
OworICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOworCisgICAgLy8gVGhlIGlu
aXRpYWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVy
IHN0cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUgcmVjdGFuZ2xlKS4KKyAgICBpbnQg
ZHggPSAtYm9yZGVyV2lkdGhQeDsKKyAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OworCisgICAg
Ly8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmln
aHQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJl
Y3QucmlnaHQoKSA+IG92ZXJsYXlSZWN0LnJpZ2h0KCkpCisgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QucmlnaHQoKSAtIHRpdGxlUmVjdC5yaWdodCgpOworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlj
a3MgYmV5b25kIHRoZSBsZWZ0IG9mIG92ZXJsYXlSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0
aCB0aGUgc2FpZCBib3VuZGFyeS4KKyAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgb3Zlcmxh
eVJlY3QueCgpKQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkg
LSBib3JkZXJXaWR0aFB4OworCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBi
b3R0b20gb2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94
LgorICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkgPiBvdmVybGF5UmVjdC5ib3R0b20oKSkgewor
ICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAtIHRpdGxlUmVjdC5ib3R0b20oKSAtIGJvcmRl
cldpZHRoUHg7CisgICAgICAgIC8vIElmIHRoZSB0aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUg
Ym90dG9tIG9mIG92ZXJsYXlSZWN0LCBib3R0b20tYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlk
IGJvdW5kYXJ5LgorICAgICAgICBpZiAodGl0bGVSZWN0LmJvdHRvbSgpICsgZHkgPiBvdmVybGF5
UmVjdC5ib3R0b20oKSkKKyAgICAgICAgICAgIGR5ID0gb3ZlcmxheVJlY3QuYm90dG9tKCkgLSB0
aXRsZVJlY3QuYm90dG9tKCk7CisgICAgfQorCisgICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5
b25kIHRoZSB0b3Agb2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2Ygb3Zlcmxh
eVJlY3QuCisgICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IG92ZXJsYXlSZWN0LnkoKSkKKyAg
ICAgICAgZHkgPSBvdmVybGF5UmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQ
eDsKKworICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7CisgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcih0b29sdGlwQm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOworICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAg
IGNvbnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0
b29sdGlwRm9udENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmRyYXdU
ZXh0KGZvbnQsIG5vZGVUaXRsZVJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZs
YXRlUHgsIHRpdGxlUmVjdC55KCkgKyBmb250LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRvdyhjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAg
ICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKKworICAg
IEZyYW1lTG9hZFJlcXVlc3QgcmVxdWVzdChtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5
T3JpZ2luKCksIFJlc291cmNlUmVxdWVzdCgpLCAiX2JsYW5rIik7CisKKyAgICBib29sIGNyZWF0
ZWQ7CisgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVhdHVyZXM7CisgICAgRnJhbWUqIG5ld0Zy
YW1lID0gV2ViQ29yZTo6Y3JlYXRlV2luZG93KG1haW5GcmFtZSwgbWFpbkZyYW1lLCByZXF1ZXN0
LCB3aW5kb3dGZWF0dXJlcywgY3JlYXRlZCk7CisgICAgaWYgKCFuZXdGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQ
cm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVy
KG1haW5GcmFtZSk7CisgICAgbmV3RnJhbWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKKyAg
ICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9uKG1haW5GcmFtZS0+ZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKSwgbmV3RnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh1cmwp
LCAiIiwgZmFsc2UsIGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6YWRkU2NyaXB0
VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSkKK3sKKyAgICBtX3NjcmlwdHNU
b0V2YWx1YXRlT25Mb2FkLmFwcGVuZChzb3VyY2UpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50
OjpyZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpCit7CisgICAgbV9zY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZC5jbGVhcigpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzZXRJbnNw
ZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit7CisgICAgbV9pbnNwZWN0
b3JFeHRlbnNpb25BUEkgPSBzb3VyY2U7Cit9CisKK0tVUkwgSW5zcGVjdG9yQWdlbnQ6Omluc3Bl
Y3RlZFVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCktPmxvYWRlcigpLT51cmwoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVsb2FkUGFn
ZSgpCit7CisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBzZXQgdGhlIHVzZXIgZ2VzdHVyZSBpbmRp
Y2F0b3IgaGVyZT8KKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IoRGVmaW5pdGVs
eVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7CisgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVsZVJlZnJlc2goKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBoZWFkZXJzKQoreworICAgIG1fZXh0cmFIZWFkZXJzID0gYWRvcHRQdHIobmV3IEhUVFBIZWFk
ZXJNYXAoKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFk
ZXJzLT5lbmQoKTsKKyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3RyaW5nIHZh
bHVlOworICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbV9leHRyYUhlYWRlcnMtPmFkZChpdC0+Zmlyc3QsIHZh
bHVlKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTJhMjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaApAQCAtMCww
ICsxLDM2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JBZ2VudF9oCisj
ZGVmaW5lIEluc3BlY3RvckFnZW50X2gKKworI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKKyNp
bmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIENoYXJhY3RlckRhdGE7CitjbGFzcyBEYXRhYmFz
ZTsKK2NsYXNzIERPTVdyYXBwZXJXb3JsZDsKK2NsYXNzIERvY3VtZW50OworY2xhc3MgRG9jdW1l
bnRMb2FkZXI7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFz
cyBIVFRQSGVhZGVyTWFwOworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK2NsYXNzIEluamVjdGVkU2Ny
aXB0OworY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7Citj
bGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKK2NsYXNzIEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50OworY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yQ29u
c29sZUFnZW50OworY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckNT
U0FnZW50OworY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7CitjbGFzcyBJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50OworY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKK2Ns
YXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKK2Ns
YXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xh
c3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKK2NsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7
CitjbGFzcyBJbnNwZWN0b3JSdW50aW1lQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JTZXR0aW5nczsK
K2NsYXNzIEluc3BlY3RvclN0YXRlOworY2xhc3MgSW5zcGVjdG9yU3RvcmFnZUFnZW50OworY2xh
c3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKK2NsYXNzIEluc3BlY3RvclZhbHVlOworY2xhc3Mg
SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgS1VSTDsKK2Ns
YXNzIE5vZGU7CitjbGFzcyBQYWdlOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVz
b3VyY2VSZXNwb25zZTsKK2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBTY3JpcHRBcmd1bWVu
dHM7CitjbGFzcyBTY3JpcHRDYWxsU3RhY2s7CitjbGFzcyBTY3JpcHRQcm9maWxlOworY2xhc3Mg
U2hhcmVkQnVmZmVyOworY2xhc3MgU3RvcmFnZUFyZWE7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQorY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Owor
I2VuZGlmCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCitjbGFzcyBJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQ7CisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKK2NsYXNzIFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3Q7CitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZTsK
KyNlbmRpZgorCitjbGFzcyBJbnNwZWN0b3JBZ2VudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5zcGVjdG9yQWdlbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDb25zb2xlUGFuZWw7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IEVsZW1lbnRzUGFuZWw7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IFByb2ZpbGVzUGFuZWw7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFNjcmlw
dHNQYW5lbDsKKworICAgIEluc3BlY3RvckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqLCBQYWdl
KiwgSW5zcGVjdG9yQ2xpZW50Kik7CisgICAgdmlydHVhbCB+SW5zcGVjdG9yQWdlbnQoKTsKKwor
ICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KKyAgICBJ
bnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Cisg
ICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVybiBtX2lu
amVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQorCisgICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJv
eWVkKCk7CisKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKKworICAgIFBhZ2UqIGluc3BlY3Rl
ZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KKyAgICBLVVJMIGluc3Bl
Y3RlZFVSTCgpIGNvbnN0OworICAgIHZvaWQgcmVsb2FkUGFnZSgpOworCisgICAgdm9pZCByZXN0
b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29va2ll
KTsKKworICAgIHZvaWQgaW5zcGVjdChOb2RlKik7CisgICAgdm9pZCBoaWdobGlnaHQoTm9kZSop
OworICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOworICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShs
b25nIG5vZGVJZCk7CisgICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hs
aWdodCgpOyB9CisKKyAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJ
ZCk7CisgICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsgfQor
CisgICAgdm9pZCBzaG93KCk7CisgICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBjbG9zZSgpOworCisgICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoKTsKKyAgICB2b2lk
IHJldXNlRnJvbnRlbmQoKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOworICAgIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQuZ2V0
KCk7IH0KKworICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKTsKKwor
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7IH07CisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29s
ZUFnZW50KCkgeyByZXR1cm4gbV9jb25zb2xlQWdlbnQuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9CisgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQor
ICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRBZ2VudCgpIHsgcmV0dXJuIG1f
aW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9CisgICAgSW5zcGVjdG9yUnVudGltZUFnZW50KiBy
dW50aW1lQWdlbnQoKSB7IHJldHVybiBtX3J1bnRpbWVBZ2VudC5nZXQoKTsgfQorICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQoKSB7IHJldHVybiBtX3RpbWVsaW5lQWdl
bnQuZ2V0KCk7IH0KKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCogZGF0YWJhc2VBZ2VudCgpIHsgcmV0dXJuIG1fZGF0YWJhc2VBZ2VudC5nZXQoKTsgfQor
I2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCogZG9tU3RvcmFnZUFnZW50KCkgeyByZXR1cm4gbV9kb21TdG9yYWdlQWdlbnQuZ2V0KCk7
IH0KKyNlbmRpZgorI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQqIGZpbGVTeXN0ZW1BZ2VudCgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbUFnZW50Lmdl
dCgpOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCogYnJvd3NlckRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmdldCgpOyB9CisgICAgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2Vu
dC5nZXQoKTsgfQorICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQuZ2V0KCk7IH0KKyNlbmRpZgorI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCisgICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5nZXQoKTsgfQorI2VuZGlmCisKKworICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUlu
UGFnZSgpIGNvbnN0OworICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOworICAgIGJvb2wgaGFuZGxlTW91
c2VQcmVzcygpOworCisgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3du
UHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50Pik7CisgICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0K
KworICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBl
cldvcmxkKik7CisKKyAgICB2b2lkIGRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqKTsKKwor
ICAgIHZvaWQgc2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7CisK
KyAgICB2b2lkIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOworICAgIHZvaWQgc3RvcFRpbWVsaW5l
UHJvZmlsZXIoKTsKKworICAgIHZvaWQgZ2V0Q29va2llcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7CisgICAgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7CisK
KyAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29u
c3QgS1VSTCYpOworICAgIHZvaWQgbWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRG9j
dW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7CisKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBl
bnVtIFdvcmtlckFjdGlvbiB7IFdvcmtlckNyZWF0ZWQsIFdvcmtlckRlc3Ryb3llZCB9OworCisg
ICAgdm9pZCBwb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChjb25zdCBJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZSYsIFdvcmtlckFjdGlvbik7CisgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIo
aW50cHRyX3QsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKKyAgICB2
b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW50cHRyX3QpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREFU
QUJBU0UpCisgICAgdm9pZCBkaWRPcGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICB2b2lkIGRpZFVz
ZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSopOwor
I2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgdm9pZCBkaWRDcmVhdGVXZWJT
b2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBj
b25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CisgICAgdm9pZCB3aWxsU2VuZFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5k
c2hha2VSZXF1ZXN0Jik7CisgICAgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VS
ZXNwb25zZSYpOworICAgIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyKTsKKyNlbmRpZgorCisgICAgYm9vbCBoYXNGcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJvbnRlbmQ7IH0KKworICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CisgICAgdm9pZCBvcGVuSW5JbnNwZWN0ZWRXaW5kb3coY29uc3QgU3RyaW5n
JiB1cmwpOworICAgIHZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2Vi
Q29yZTo6U2V0dGluZ3MqKSBjb25zdDsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorICAgIGJvb2wgaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0OworICAg
IHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9
CisgICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAgICB2b2lkIHN0b3BQ
cm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7IH0KKyAgICB2b2lkIHN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7CisgICAgdm9pZCBlbmFibGVQcm9maWxlcihib29s
IGFsd2F5cyA9IGZhbHNlLCBib29sIHNraXBSZWNvbXBpbGUgPSBmYWxzZSk7CisgICAgdm9pZCBk
aXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CisgICAgYm9vbCBwcm9maWxlckVu
YWJsZWQoKSBjb25zdDsKKworICAgIHZvaWQgc2hvd0FuZEVuYWJsZURlYnVnZ2VyKCk7CisgICAg
dm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7CisgICAgdm9pZCBkaXNhYmxlRGVidWdn
ZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7CisgICAgYm9vbCBkZWJ1Z2dlckVuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQ7IH0KKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAg
dm9pZCBzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KTsKKyNlbmRpZgorCisgICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxlZCBmcm9tIGN1c3RvbSBpbXBs
ZW1lbnRhdGlvbnMuCisgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgdGVz
dENhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOworCisgICAgdm9pZCBhZGRTY3JpcHRUb0V2
YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291cmNlKTsKKyAgICB2b2lkIHJlbW92ZUFsbFNj
cmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7CisgICAgdm9pZCBzZXRJbnNwZWN0b3JFeHRlbnNpb25B
UEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOworCisgICAgYm9vbCBpbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZCgpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCk7CisgICAg
dm9pZCBzZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChsb25nKTsKKyAgICBsb25nIGluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0KCkgY29uc3Q7CisKKyAgICBJbnNwZWN0b3JTdGF0ZSogc3RhdGUoKSB7
IHJldHVybiBtX3N0YXRlLmdldCgpOyB9CisgICAgSW5zcGVjdG9yU2V0dGluZ3MqIHNldHRpbmdz
KCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQorCisgICAgLy8gSW5zcGVjdG9yQWdlbnQg
QVBJCisgICAgdm9pZCBnZXRJbnNwZWN0b3JTdGF0ZShSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
c3RhdGUpOworICAgIHZvaWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBi
b29sKiBuZXdTdGF0ZSk7CisgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKKyAgICAv
LyBGb2xsb3dpbmcgYXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5
LgorICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0
YXRlKTsKKyAgICB2b2lkIGRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYganNvblJlc3VsdCk7CisKKyAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24gQVBJCisgICAgdm9pZCBlbnN1cmVTZXR0aW5nc0xvYWRlZCgpOworICAgIHZvaWQgd2ls
bFNlbmRSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOworCitwcml2YXRlOgorICAgIHZvaWQgcHVz
aERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7CisgICAgdm9pZCByZXN0b3JlRGVidWdnZXIoKTsKKyAg
ICBlbnVtIFByb2ZpbGVyUmVzdG9yZUFjdGlvbiB7CisgICAgICAgIFByb2ZpbGVyUmVzdG9yZU5v
QWN0aW9uID0gMCwKKyAgICAgICAgUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCA9IDEKKyAgICB9
OworICAgIHZvaWQgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbik7CisgICAg
dm9pZCB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUo
Ym9vbCBlbmFibGVkKTsKKworICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMo
KTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQorICAgIHZvaWQgdG9nZ2xlUmVj
b3JkQnV0dG9uKGJvb2wpOworI2VuZGlmCisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJik7CisgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYp
OworCisgICAgdm9pZCBmb2N1c05vZGUoKTsKKyAgICBib29sIGlzTWFpblJlc291cmNlTG9hZGVy
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYgcmVxdWVzdFVybCk7CisKKyAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgUGFnZSogbV9pbnNwZWN0
ZWRQYWdlOworICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CisgICAgT3duUHRyPEluc3Bl
Y3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OworICAgIGJvb2wg
bV9vcGVuaW5nRnJvbnRlbmQ7CisgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250
ZW5kOworICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2VudDsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CisKKyNpZiBFTkFCTEUoREFUQUJBU0Up
CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IG1fZGF0YWJhc2VBZ2VudDsKKyNl
bmRpZgorCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIFJlZlB0cjxJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ+IG1fZG9tU3RvcmFnZUFnZW50OworI2VuZGlmCisKKyAgICBPd25QdHI8SW5z
cGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OworICAgIE93blB0cjxJbnNwZWN0
b3JTdGF0ZT4gbV9zdGF0ZTsKKyAgICBPd25QdHI8SW5zcGVjdG9yU2V0dGluZ3M+IG1fc2V0dGlu
Z3M7CisKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIE93blB0cjxJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50Owor
I2VuZGlmCisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgUmVmUHRyPEluc3BlY3RvckZp
bGVTeXN0ZW1BZ2VudD4gbV9maWxlU3lzdGVtQWdlbnQ7CisjZW5kaWYKKworICAgIFJlZlB0cjxO
b2RlPiBtX25vZGVUb0ZvY3VzOworICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZUFnZW50PiBt
X3Jlc291cmNlQWdlbnQ7CisgICAgT3duUHRyPEluc3BlY3RvclJ1bnRpbWVBZ2VudD4gbV9ydW50
aW1lQWdlbnQ7CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U+ID4gRGF0YWJhc2VSZXNvdXJjZXNN
YXA7CisgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXAgbV9kYXRhYmFzZVJlc291cmNlczsKKyNlbmRp
ZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQ
dHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiA+IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA7
CisgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcCBtX2RvbVN0b3JhZ2VSZXNvdXJjZXM7CisjZW5k
aWYKKworICAgIFN0cmluZyBtX3Nob3dBZnRlclZpc2libGU7CisgICAgUmVmUHRyPE5vZGU+IG1f
aGlnaGxpZ2h0ZWROb2RlOworICAgIE93blB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKKyAgICBSZWZQdHI8SW5qZWN0ZWRTY3JpcHRI
b3N0PiBtX2luamVjdGVkU2NyaXB0SG9zdDsKKyAgICBPd25QdHI8SW5zcGVjdG9yQ29uc29sZUFn
ZW50PiBtX2NvbnNvbGVBZ2VudDsKKworICAgIFZlY3RvcjxwYWlyPGxvbmcsIFN0cmluZz4gPiBt
X3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3Njcmlw
dHNUb0V2YWx1YXRlT25Mb2FkOworICAgIFN0cmluZyBtX2luc3BlY3RvckV4dGVuc2lvbkFQSTsK
KyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBib29sIG1fYXR0YWNoRGVidWdn
ZXJXaGVuU2hvd247CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IG1fZGVidWdn
ZXJBZ2VudDsKKyAgICBPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IG1fYnJv
d3NlckRlYnVnZ2VyQWdlbnQ7CisgICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1f
cHJvZmlsZXJBZ2VudDsKKyNlbmRpZgorICAgIE93blB0cjxIVFRQSGVhZGVyTWFwPiBtX2V4dHJh
SGVhZGVyczsKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRy
X3QsIFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gPiBXb3JrZXJzTWFwOworCisgICAg
V29ya2Vyc01hcCBtX3dvcmtlcnM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckFnZW50X2gpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuY3BwCmluZGV4IDFjY2E2ZmUuLjI3NzZjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBA
IC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJO
ZXR3b3JrU3RhdGVOb3RpZmllci5oIgpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIs
IEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxl
cihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFn
ZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCisgICAgOiBtX2luc3BlY3RvckFnZW50
KGluc3BlY3RvckFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKIHsKIH0KQEAgLTYx
LDcgKzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Om5ldHdvcmtT
dGF0ZUNoYW5nZWQoKQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
QXBwbGljYXRpb25DYWNoZXMoUmVmUHRyPEluc3BlY3RvclZhbHVlPiogYXBwbGljYXRpb25DYWNo
ZXMpCiB7Ci0gICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKTsKKyAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2luc3Bl
Y3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1l
bnRMb2FkZXIoKTsKICAgICBpZiAoZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgQXBwbGljYXRp
b25DYWNoZUhvc3QqIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3Qo
KTsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyBpbmZvID0gaG9zdC0+
YXBwbGljYXRpb25DYWNoZUluZm8oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCBhYzBhY2JmLi5i
OTM1MmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIElu
c3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3Rv
ckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7
CkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChJbnNwZWN0b3JDb250cm9s
bGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwor
ICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChJbnNwZWN0b3JBZ2VudCosIEluc3Bl
Y3RvckZyb250ZW5kKik7CiAgICAgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIHsg
fQogCiAgICAgLy8gQmFja2VuZCB0byBGcm9udGVuZApAQCAtNTksNyArNTksNyBAQCBwcml2YXRl
OgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2VzKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9M
aXN0Jik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXBw
bGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJj
ZUluZm8mKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxl
cjsKKyAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JG
cm9udGVuZCogbV9mcm9udGVuZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDAyM2Rj
NDkuLjdlZTdlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2lm
IEVOQUJMRShJTlNQRUNUT1IpICYmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCiAjaW5j
bHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JTdGF0ZS5oIgpAQCAtNjEsOCArNjEsOCBAQCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2
ZWRUeXBlU2hpZnQgPSAxNjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJv
bGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6
Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JB
Z2VudCkKKyAgICA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2hh
c1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwoZmFsc2UpCiB7CiB9CkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQo
Y29uc3QgS1VSTCYgdXJsKQogICAgIG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKICAgICBtX2hh
c1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGFsbEJyZWFrcG9pbnRzID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgp
LT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cyk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYWxsQnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckFnZW50LT5z
dGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cyk7CiAg
ICAgS1VSTCB1cmxDb3B5ID0gdXJsOwogICAgIHVybENvcHkucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBicmVha3BvaW50cyA9IGFsbEJyZWFr
cG9pbnRzLT5nZXRBcnJheSh1cmxDb3B5KTsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludChQYXNzUmVm
UHRyPEluc3BlY3RvcgogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5h
bWUiLCAmZXZlbnROYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgc2V0RXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnQoZXZlbnROYW1lKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gamF2
YVNjcmlwdEJyZWFrcG9pbnRUeXBlICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJB
Z2VudCgpKSB7CisgICAgfSBlbHNlIGlmICh0eXBlID09IGphdmFTY3JpcHRCcmVha3BvaW50VHlw
ZSAmJiBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckFnZW50KCkpIHsKICAgICAgICAgU3RyaW5n
IHVybDsKICAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6cmVzdG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNw
ZWN0b3IKICAgICAgICAgU3RyaW5nIGphdmFTY3JpcHRDb25kaXRpb247CiAgICAgICAgIGlmICgh
Y29uZGl0aW9uLT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZqYXZhU2NyaXB0Q29uZGl0aW9uKSkK
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1
Z2dlckFnZW50KCktPnNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGluZU51bWJlciksIGphdmFTY3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOworICAgICAgICBt
X2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckFnZW50KCktPnNldFN0aWNreUJyZWFrcG9pbnQodXJs
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGphdmFTY3JpcHRDb25kaXRpb24s
IGVuYWJsZWQpOwogICAgIH0gZWxzZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSkgewog
ICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4
LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9k
ZShOb2RlKiBub2RlKQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRE
T01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7Cisg
ICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPm5vZGVGb3JJZChu
b2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTIsNyArMTky
LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2lu
dChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiB7Ci0g
ICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+bm9kZUZv
cklkKG5vZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50
KCktPm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
cmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogCiB2b2lkIEluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiwgTm9kZSog
cGFyZW50KQogewotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKTsKKyAgICBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2Vu
dCgpOwogICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjUs
NyArMjI1LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbEluc2Vy
dERPTU5vZGUoTm9kZSosIE5vZGUqIHBhcmVudCkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVi
dWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5k
ZWJ1Z2dlckFnZW50KCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2Vu
dCA9IG1faW5zcGVjdG9yQWdlbnQtPmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRlYnVnZ2Vy
QWdlbnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAK
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJB
Z2VudCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kZWJ1
Z2dlckFnZW50KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47CiAK
QEAgLTI2NCw3ICsyNjQsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpk
ZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicgogICAgIGlmICgoMSA8
PCBicmVha3BvaW50VHlwZSkgJiBpbmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spIHsK
ICAgICAgICAgLy8gRm9yIGluaGVyaXRhYmxlIGJyZWFrcG9pbnQgdHlwZXMsIHRhcmdldCBub2Rl
IGlzbid0IGFsd2F5cyB0aGUgc2FtZSBhcyB0aGUgbm9kZSB0aGF0IG93bnMgYSBicmVha3BvaW50
LgogICAgICAgICAvLyBUYXJnZXQgbm9kZSBtYXkgYmUgdW5rbm93biB0byBmcm9udGVuZCwgc28g
d2UgbmVlZCB0byBwdXNoIGl0IGZpcnN0LgotICAgICAgICBsb25nIHRhcmdldE5vZGVJZCA9IG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZCh0
YXJnZXQpOworICAgICAgICBsb25nIHRhcmdldE5vZGVJZCA9IG1faW5zcGVjdG9yQWdlbnQtPmRv
bUFnZW50KCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQodGFyZ2V0KTsKICAgICAgICAgQVNTRVJU
KHRhcmdldE5vZGVJZCk7CiAgICAgICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInRhcmdldE5v
ZGVJZCIsIHRhcmdldE5vZGVJZCk7CiAKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdl
dCwgbG9uZyBicgogICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldEJvb2xlYW4oImluc2VydGlv
biIsIGluc2VydGlvbik7CiAgICAgfQogCi0gICAgbG9uZyBicmVha3BvaW50T3duZXJOb2RlSWQg
PSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoYnJlYWtwb2ludE93bmVyKTsKKyAgICBsb25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1f
aW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYnJlYWtw
b2ludE93bmVyKTsKICAgICBBU1NFUlQoYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKICAgICBkZXNj
cmlwdGlvbi0+c2V0TnVtYmVyKCJub2RlSWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwogICAg
IGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInR5cGUiLCBicmVha3BvaW50VHlwZSk7CkBAIC0zMTQs
NyArMzE0LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6dXBkYXRlU3Vi
dHJlZUJyZWFrcG9pbnRzKE5vZGUqIG5vZGUsIHVpbnQzMl8KIAogdm9pZCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoY29uc3QgU3RyaW5n
JiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3Vz
KQogewotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpOwog
ICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNDksNyArMzQ5
LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIHVybCkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5kZWJ1Z2dlckFnZW50KCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdn
ZXJBZ2VudCA9IG1faW5zcGVjdG9yQWdlbnQtPmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRl
YnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwZmZh
ODVjLi42Yzg5M2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OwotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxl
cjsKK2NsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3Mg
S1VSTDsKIGNsYXNzIE5vZGU7CkBAIC01Miw5ICs1Miw5IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
T3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ29u
dHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiBpbnNwZWN0
b3JBZ2VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQoaW5zcGVjdG9yQ29udHJvbGxlcikpOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KGluc3BlY3RvckFnZW50
KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQo
KTsKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGF1c2VPbk5hdGl2ZUV2ZW50
SWZOZWVkZWQoY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lLCBib29sIHN5bmNocm9ub3VzKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqKTsKIAogICAgIHZvaWQgcmVzdG9yZVN0aWNr
eUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQpOwogCkBA
IC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBs
b25nIHR5cGUpOwogICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CiAKLSAgICBJbnNwZWN0b3JD
b250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1f
aW5zcGVjdG9yQWdlbnQ7CiAgICAgSGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fZG9tQnJlYWtw
b2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOwog
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX1hIUkJyZWFrcG9pbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAppbmRleCAyYzgzN2YzLi43
NjYzOGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNp
bmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5o
IgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTZXR0aW5ncy5oIgpAQCAtNTAsOCAr
NTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11
bUNvbnNvbGVNZXNzYWdlcyA9IDEwMDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29u
c29sZU1lc3NhZ2VzU3RlcCA9IDEwMDsKIAotSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJbnNwZWN0
b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikK
LSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50KQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAg
ICAsIG1fZnJvbnRlbmQoMCkKICAgICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCiAgICAgLCBtX2V4
cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDApCkBAIC02MCw3ICs2MCw3IEBAIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyCiAKIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6fkluc3BlY3RvckNvbnNvbGVB
Z2VudCgpCiB7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKKyAgICBtX2luc3BlY3Rv
ckFnZW50ID0gMDsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVN
ZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSkKQEAgLTc0LDggKzc0
LDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkK
ICAgICBtX2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNz
YWdlQ291bnQgPSAwOwogICAgIG1fcHJldmlvdXNNZXNzYWdlID0gMDsKLSAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5yZWxlYXNlV3JhcHBlck9iamVjdEdy
b3VwKDAgLyogcmVsZWFzZSB0aGUgZ3JvdXAgaW4gYWxsIHNjcmlwdHMgKi8sICJjb25zb2xlIik7
Ci0gICAgaWYgKEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zcGVjdG9yQ29udHJv
bGxlci0+ZG9tQWdlbnQoKSkKKyAgICBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhv
c3QoKS0+cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCgwIC8qIHJlbGVhc2UgdGhlIGdyb3VwIGlu
IGFsbCBzY3JpcHRzICovLCAiY29uc29sZSIpOworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2Vu
dC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAg
bV9mcm9udGVuZC0+Y29uc29sZU1lc3NhZ2VzQ2xlYXJlZCgpOwpAQCAtOTUsMTQgKzk1LDE0IEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9D
b25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2
ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVu
dHM+IGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsK
LSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9p
bnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgYWRkQ29uc29s
ZU1lc3NhZ2UobmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2Us
IGFyZ3VtZW50cywgY2FsbFN0YWNrKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0
eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKLSAgICBpZiAoIW1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgYWRkQ29uc29sZU1lc3NhZ2UobmV3IENvbnNv
bGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJj
ZUlEKSk7CiB9CkBAIC0xNjMsMTUgKzE2MywxNSBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6Y291bnQoUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZgog
CiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBS
ZXF1ZXN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVk
IHNlbmRMaW5lTnVtYmVyKQogewotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFi
bGVkKCkpCisgICAgaWYgKCFtX2luc3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgpLT5nZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSkKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2Vu
dC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUikpCiAg
ICAgICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgTG9nTWVzc2FnZUxldmVsLCAiWEhSIGZpbmlzaGVkIGxvYWRpbmc6IFwiIiArIHVybCArICJc
Ii4iLCBzZW5kTGluZU51bWJlciwgc2VuZFVSTCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+
PSA0MDApIHsKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUgogCiB2
b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBpZiAoIW1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+
ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWVzc2FnZSA9ICJGYWls
ZWQgdG8gbG9hZCByZXNvdXJjZSI7CkBAIC0xOTMsNDAgKzE5Myw0MCBAQCB2b2lkIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBSZXNvdQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hI
UkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3Rh
dGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUiwgZW5hYmxlZCk7
Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zZXR0aW5ncygpLT5zZXRCb29sZWFuKEluc3Bl
Y3RvclNldHRpbmdzOjpNb25pdG9yaW5nWEhSRW5hYmxlZCwgZW5hYmxlZCk7CisgICAgbV9pbnNw
ZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmlu
Z1hIUiwgZW5hYmxlZCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c2V0dGluZ3MoKS0+c2V0Qm9v
bGVhbihJbnNwZWN0b3JTZXR0aW5nczo6TW9uaXRvcmluZ1hIUkVuYWJsZWQsIGVuYWJsZWQpOwog
ICAgIGlmIChtX2Zyb250ZW5kKQogICAgICAgICBtX2Zyb250ZW5kLT5tb25pdG9yaW5nWEhSU3Rh
dGVDaGFuZ2VkKGVuYWJsZWQpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0
Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5zdGF0ZSgpLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVz
c2FnZXNFbmFibGVkLCBlbmFibGVkKTsKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5z
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBlbmFibGVk
KTsKICAgICBpZiAoIWVuYWJsZWQgfHwgIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZnJvbnRlbmQtPm1vbml0b3JpbmdYSFJTdGF0ZUNoYW5nZWQobV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhS
KSk7CisgICAgbV9mcm9udGVuZC0+bW9uaXRvcmluZ1hIUlN0YXRlQ2hhbmdlZChtX2luc3BlY3Rv
ckFnZW50LT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhS
KSk7CiAgICAgaWYgKG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpCiAgICAgICAgIG1fZnJv
bnRlbmQtPnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KG1fZXhwaXJlZENvbnNvbGVN
ZXNzYWdlQ291bnQpOwogICAgIHVuc2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3Nh
Z2VzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyAr
K2kpCi0gICAgICAgIG1fY29uc29sZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRl
bmQsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOworICAgICAg
ICBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3Bl
Y3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPiBj
b25zb2xlTWVzc2FnZSkKIHsKLSAgICBBU1NFUlQobV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFi
bGVkKCkpOworICAgIEFTU0VSVChtX2luc3BlY3RvckFnZW50LT5lbmFibGVkKCkpOwogICAgIEFT
U0VSVF9BUkcoY29uc29sZU1lc3NhZ2UsIGNvbnNvbGVNZXNzYWdlKTsKIAogICAgIGlmIChtX3By
ZXZpb3VzTWVzc2FnZSAmJiBtX3ByZXZpb3VzTWVzc2FnZS0+aXNFcXVhbChjb25zb2xlTWVzc2Fn
ZS5nZXQoKSkpIHsKICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmluY3JlbWVudENvdW50KCk7
Ci0gICAgICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXRlKCktPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCisg
ICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zyb250ZW5kKQogICAgICAgICAg
ICAgbV9wcmV2aW91c01lc3NhZ2UtPnVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKG1fZnJvbnRl
bmQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29uc29sZU1l
c3NhZ2UuZ2V0KCk7CiAgICAgICAgIG1fY29uc29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xlTWVz
c2FnZSk7Ci0gICAgICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXRlKCktPmdldEJv
b2xlYW4oSW5zcGVjdG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRl
bmQpCi0gICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Gcm9udGVuZChtX2Zyb250
ZW5kLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpKTsKKyAgICAg
ICAgaWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCisgICAgICAgICAgICBt
X3ByZXZpb3VzTWVzc2FnZS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3BlY3RvckFn
ZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2Zyb250ZW5k
ICYmIG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKSA+PSBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgK
aW5kZXggNDExZjcwOS4uMTBmZmIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogY2xhc3MgQ29uc29sZU1lc3NhZ2U7Ci1j
bGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgUmVzb3VyY2VF
cnJvcjsKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNzIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29u
c29sZUFnZW50KTsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9y
Q29udHJvbGxlciopOworICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudChJbnNwZWN0b3JBZ2VudCop
OwogICAgIH5JbnNwZWN0b3JDb25zb2xlQWdlbnQoKTsKIAogICAgIHZvaWQgc2V0Q29uc29sZU1l
c3NhZ2VzRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKQEAgLTc3LDcgKzc3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCk7
CiAgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPik7
CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAg
SW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQq
IG1fZnJvbnRlbmQ7CiAgICAgQ29uc29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwogICAg
IFZlY3RvcjxPd25QdHI8Q29uc29sZU1lc3NhZ2U+ID4gbV9jb25zb2xlTWVzc2FnZXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
ODUzM2E1Zi4uZmI4NDA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMSwzMCArMSwzMSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDEzNzcgKzMzLDE1
IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2Uu
aCIKLSNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNocm9tZS5o
IgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgi
Ci0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJG
cmFtZUxvYWRSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VFRQSGVhZGVyTWFwLmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIklu
amVjdGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgotI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKLSNp
bmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclNldHRp
bmdzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JU
aW1lbGluZUFnZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlwdEFyZ3Vt
ZW50cy5oIgotI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNjcmlwdEZ1
bmN0aW9uQ2FsbC5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgotI2luY2x1ZGUgIlNjcmlw
dFByb2ZpbGUuaCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgotI2luY2x1ZGUgIlNjcmlw
dFNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCi0jaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3Iu
aCIKLSNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLSNp
ZiBFTkFCTEUoREFUQUJBU0UpCi0jaW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
LSNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKLSNpbmNsdWRlICJTdG9yYWdl
LmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLSNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotI2luY2x1ZGUgIklu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7Ci1jb25zdCBjaGFyKiBjb25zdCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7Ci1jb25zdCBjaGFy
KiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7Ci1j
b25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInBy
b2ZpbGVzIjsKLQotSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdl
KiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKLSAgICA6IG1faW5zcGVjdGVkUGFnZShw
YWdlKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFs
c2UpCi0gICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQotICAgICwgbV9z
dGF0ZShuZXcgSW5zcGVjdG9yU3RhdGUoY2xpZW50KSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIobmV3IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQotICAgICwg
bV9pbmplY3RlZFNjcmlwdEhvc3QoSW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCi0g
ICAgLCBtX2NvbnNvbGVBZ2VudChuZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMpKQotI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5T
aG93bihmYWxzZSkKLSAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpjcmVhdGUodGhpcykpCi0jZW5kaWYKLXsKLSAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwot
ICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwotfQotCi1JbnNwZWN0b3JDb250cm9sbGVy
Ojp+SW5zcGVjdG9yQ29udHJvbGxlcigpCi17Ci0gICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVl
biBjbGVhcmVkIGluIGluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKS4KLSAgICBBU1NFUlQoIW1fY2xp
ZW50KTsKLSAgICBBU1NFUlQoIW1faW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hs
aWdodGVkTm9kZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFn
ZURlc3Ryb3llZCgpCi17Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQt
PmRpc2Nvbm5lY3RGcm9tQmFja2VuZCgpOwotCi0gICAgaGlkZUhpZ2hsaWdodCgpOwotCi0jaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7
Ci0gICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC5jbGVhcigpOwotI2VuZGlmCi0KLSAgICBBU1NF
UlQobV9pbnNwZWN0ZWRQYWdlKTsKLSAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwotCi0gICAgcmVs
ZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKLSAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+
ZGlzY29ubmVjdENvbnRyb2xsZXIoKTsKLQotICAgIG1fY2xpZW50LT5pbnNwZWN0b3JEZXN0cm95
ZWQoKTsKLSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5z
cGVjdG9yU3RhcnRzQXR0YWNoZWQoKQotewotICAgIHJldHVybiBtX3NldHRpbmdzLT5nZXRCb29s
ZWFuKEluc3BlY3RvclNldHRpbmdzOjpJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCBh
dHRhY2hlZCkKLXsKLSAgICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdz
OjpJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCwgYXR0YWNoZWQpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KQotewot
ICAgIG1fc2V0dGluZ3MtPnNldExvbmcoSW5zcGVjdG9yU2V0dGluZ3M6Okluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0LCBoZWlnaHQpOwotfQotCi1sb25nIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXR0aW5ncy0+Z2V0
TG9uZyhJbnNwZWN0b3JTZXR0aW5nczo6SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOwotfQotCi1i
b29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hp
bmdGb3JOb2RlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVj
dG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCi17
Ci0gICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JDb29raWUoaW5zcGVjdG9yU3RhdGVD
b29raWUpOwotCi0gICAgaWYgKCFtX2Zyb250ZW5kKSB7Ci0gICAgICAgIGNvbm5lY3RGcm9udGVu
ZCgpOwotICAgICAgICBtX2Zyb250ZW5kLT5mcm9udGVuZFJldXNlZCgpOwotICAgICAgICBtX2Zy
b250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKLSAg
ICAgICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpOwotICAg
IH0KLQotICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc3Rv
cmUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKLQot
ICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2Zp
bGVyRW5hYmxlZCkpCi0gICAgICAgIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwotCi0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgcmVzdG9yZURlYnVnZ2VyKCk7Ci0gICAgcmVz
dG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQpOwotICAgIGlmIChtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nKSkKLSAg
ICAgICAgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFlbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNob3coKTsKLQotICAgIGlmIChub2RlLT5u
b2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5v
ZGU6OkRPQ1VNRU5UX05PREUpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0g
ICAgbV9ub2RlVG9Gb2N1cyA9IG5vZGU7Ci0KLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGZvY3VzTm9kZSgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmZvY3VzTm9kZSgpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKLSAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7Ci0K
LSAgICBsb25nIGlkID0gbV9kb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtX25vZGVU
b0ZvY3VzLmdldCgpKTsKLSAgICBtX2Zyb250ZW5kLT51cGRhdGVGb2N1c2VkTm9kZShpZCk7Ci0g
ICAgbV9ub2RlVG9Gb2N1cyA9IDA7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGln
aGxpZ2h0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUpOwotICAgIG1faGlnaGxpZ2h0ZWROb2RlID0g
bm9kZTsKLSAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KG5vZGUpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpCi17Ci0gICAgTm9kZSog
bm9kZSA9IDA7Ci0gICAgaWYgKG1fZG9tQWdlbnQgJiYgKG5vZGUgPSBtX2RvbUFnZW50LT5ub2Rl
Rm9ySWQobm9kZUlkKSkpCi0gICAgICAgIGhpZ2hsaWdodChub2RlKTsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRGcmFtZSh1bnNpZ25lZCBsb25nIGZyYW1lSWQpCi17
Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0g
ICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUpKSB7Ci0gICAgICAgIGlmIChyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oZnJhbWUpID09IGZyYW1lSWQgJiYgZnJhbWUtPm93bmVyRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBoaWdobGlnaHQoZnJhbWUtPm93bmVyRWxlbWVudCgpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpoaWRlSGlnaGxpZ2h0KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gMDsKLSAgICBtX2NsaWVudC0+aGlk
ZUhpZ2hsaWdodCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCi17Ci0g
ICAgaWYgKCFlbmFibGVkKCkgfHwgIXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICB3aGls
ZSAobm9kZSAmJiBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkKLSAgICAgICAg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgaGlnaGxp
Z2h0KG5vZGUpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJl
c3MoKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2hpZ2hsaWdodGVkTm9kZSkgewot
ICAgICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgICAgICBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNlKTsKLSAgICAgICAgaW5zcGVjdChub2RlLmdldCgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENs
aWVudD4gY2xpZW50KQotewotICAgIEFTU0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7
Ci0gICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCA9IGNsaWVudDsKLX0KLQotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1l
LCBET01XcmFwcGVyV29ybGQqIHdvcmxkKQotewotICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaXMg
c3VwcG9zZWQgdG8gc2VydmUgYXMgSW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZy
b250ZW5kCi0gICAgLy8gY2xpZW50IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVu
dCBjYW4gZXhwb3NlIGluc3BlY3RvciBiaW5kaW5ncy4KLSAgICBpZiAobV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudCAmJiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0K
LSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kICYmIGZyYW1lID09
IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICAgICBtX2luamVjdGVkU2Ny
aXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOwotICAgICAgICBpZiAobV9zY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZC5zaXplKCkpIHsKLSAgICAgICAgICAgIFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKTsKLSAgICAgICAgICAgIGZvciAo
VmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5i
ZWdpbigpOwotICAgICAgICAgICAgICAgICBpdCAhPSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2Fk
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmlu
amVjdFNjcmlwdCgqaXQsIHNjcmlwdFN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAoIW1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVuc2lv
bkFQSSwgbWFpbldvcmxkU2NyaXB0U3RhdGUoZnJhbWUpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAo
c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlLCBl
bmFibGVkKTsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIGhpZGVIaWdobGlnaHQoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5h
YmxlZCwgYm9vbCogbmV3U3RhdGUpCi17Ci0gICAgKm5ld1N0YXRlID0gZW5hYmxlZDsKLSAgICBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmNvbm5lY3RGcm9udGVuZCgpCi17Ci0gICAgbV9vcGVuaW5nRnJvbnRlbmQgPSBmYWxzZTsK
LSAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwotICAgIG1fZnJvbnRlbmQgPSBu
ZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9jbGllbnQpOwotICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0
b3JET01BZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpLCBtX2Zyb250ZW5k
LmdldCgpKTsKLSAgICBtX3J1bnRpbWVBZ2VudCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3Jl
YXRlKG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpKTsKLSAgICBtX2Nzc0FnZW50LT5zZXRET01B
Z2VudChtX2RvbUFnZW50LmdldCgpKTsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBtX2Rh
dGFiYXNlQWdlbnQgPSBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VS
ZXNvdXJjZXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCi0gICAgbV9kb21TdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OmNyZWF0ZSgmbV9kb21TdG9yYWdlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRp
ZgotCi0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5y
ZXNldEZyb250ZW5kUHJveHlPYmplY3QobV9mcm9udGVuZC5nZXQoKSk7Ci0KLSAgICBtX2NvbnNv
bGVBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7Ci0KLSAgICAvLyBJbml0aWFs
aXplIFdlYiBJbnNwZWN0b3IgdGl0bGUuCi0gICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hh
bmdlZChpbnNwZWN0ZWRVUkwoKS5zdHJpbmcoKSk7Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TKQotICAgIG1fYXBwbGljYXRpb25DYWNoZUFnZW50ID0gbmV3IEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIG1fZmlsZVN5c3RlbUFnZW50ID0gSW5zcGVj
dG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0jZW5k
aWYKLSAgICAKLSAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRz
KCkpCi0gICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JVbmNh
dWdodEV4Y2VwdGlvbnModHJ1ZSk7Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcm9u
dGVuZENyZWF0ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKLXsK
LSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3Blbmlu
Z0Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAg
ICAgbV9mcm9udGVuZC0+YnJpbmdUb0Zyb250KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fb3Bl
bmluZ0Zyb250ZW5kID0gdHJ1ZTsKLSAgICAgICAgbV9jbGllbnQtPm9wZW5JbnNwZWN0b3JGcm9u
dGVuZCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1Bh
bmVsKGNvbnN0IFN0cmluZyYgcGFuZWwpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNob3coKTsKLQotICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAg
ICBtX3Nob3dBZnRlclZpc2libGUgPSBwYW5lbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBtX2Zyb250ZW5kLT5zaG93UGFuZWwocGFuZWwpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmNsb3NlKCkKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKLSAgICBkaXNjb25uZWN0
RnJvbnRlbmQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJv
bnRlbmQoKQotewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9mcm9udGVuZC5jbGVhcigpOwotCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcm9u
dGVuZERlbGV0ZWQoKTsKLSAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJv
bnRlbmRzKCkpCi0gICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tG
b3JVbmNhdWdodEV4Y2VwdGlvbnMoZmFsc2UpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVi
dWdnZXIgZW5hYmxlZCwKLSAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBk
ZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKLSAgICAvLyBvcGVuaW5nLgotICAgIGJvb2wgZGVi
dWdnZXJXYXNFbmFibGVkID0gZGVidWdnZXJFbmFibGVkKCk7Ci0gICAgZGlzYWJsZURlYnVnZ2Vy
KCk7Ci0gICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGRlYnVnZ2VyV2FzRW5hYmxlZDsK
LSNlbmRpZgotICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOwotICAgIHVuYmluZEFsbFJl
c291cmNlcygpOwotICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0KLSAgICBoaWRlSGlnaGxp
Z2h0KCk7Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBtX3Byb2ZpbGVy
QWdlbnQtPnNldEZyb250ZW5kKDApOwotICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJv
bnRlbmQoMCk7Ci0KLSAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwotICAgIG1f
dGltZWxpbmVBZ2VudC5jbGVhcigpOwotICAgIG1fZXh0cmFIZWFkZXJzLmNsZWFyKCk7Ci19Ci0K
LUluc3BlY3RvclJlc291cmNlQWdlbnQqIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlQWdl
bnQoKQotewotICAgIGlmICghbV9yZXNvdXJjZUFnZW50ICYmIG1fZnJvbnRlbmQpCi0gICAgICAg
IG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3Bl
Y3RlZFBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIHJldHVybiBt
X3Jlc291cmNlQWdlbnQuZ2V0KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVs
ZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQotewotICAgIG1fcmVzb3VyY2VBZ2VudC5jbGVh
cigpOwotICAgIG1fcnVudGltZUFnZW50LmNsZWFyKCk7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBi
ZSBpbnZva2VkIHByaW9yIHRvIG1fZG9tQWdlbnQgZGVzdHJ1Y3Rpb24uCi0gICAgbV9jc3NBZ2Vu
dC0+c2V0RE9NQWdlbnQoMCk7Ci0KLSAgICAvLyBtX2RvbUFnZW50IGlzIFJlZlB0ci4gUmVtb3Zl
IERPTSBsaXN0ZW5lcnMgZmlyc3QgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlCi0gICAgLy8gbm8g
cmVmZXJlbmNlcyB0byB0aGUgRE9NIGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgotICAgIGlmICht
X2RvbUFnZW50KQotICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQu
Y2xlYXIoKTsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBpZiAobV9kYXRhYmFzZUFnZW50
KQotICAgICAgICBtX2RhdGFiYXNlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKLSAgICBtX2RhdGFi
YXNlQWdlbnQuY2xlYXIoKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAg
IG1fZG9tU3RvcmFnZUFnZW50LmNsZWFyKCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShPRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpCi0gICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuY2xlYXIoKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIGlmIChtX2ZpbGVTeXN0ZW1B
Z2VudCkKLSAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPnN0b3AoKTsgCi0gICAgICAgIG1fZmls
ZVN5c3RlbUFnZW50LmNsZWFyKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQotewotICAgIEFTU0VSVChtX2Zyb250ZW5kKTsK
LSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaG93
QWZ0ZXJWaXNpYmxlLmlzRW1wdHkoKSkgewotICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJW
aXNpYmxlKTsKLSAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gIiI7Ci0gICAgfQotCi0jaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgaWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5h
YmxlZCgpKQotICAgICAgICBtX2Zyb250ZW5kLT5wcm9maWxlcldhc0VuYWJsZWQoKTsKLSNlbmRp
ZgotCi0gICAgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7Ci0KLSAgICBpZiAobV9ub2RlVG9G
b2N1cykKLSAgICAgICAgZm9jdXNOb2RlKCk7Ci0KLSAgICAvLyBEaXNwYXRjaCBwZW5kaW5nIGZy
b250ZW5kIGNvbW1hbmRzCi0gICAgZm9yIChWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID46Oml0
ZXJhdG9yIGl0ID0gbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuYmVnaW4oKTsgaXQgIT0g
bV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZnJv
bnRlbmQtPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29u
ZCk7Ci0gICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKLQotICAgIHJl
c3RvcmVEZWJ1Z2dlcigpOwotICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVOb0Fj
dGlvbik7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHVzaERhdGFDb2xsZWN0ZWRP
ZmZsaW5lKCkKLXsKLSAgICBtX2RvbUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJl
c291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBp
dCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0
KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0j
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9y
IChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291
cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vj
b25kLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpICYmIEVOQUJMRShXT1JLRVJTKQotICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9y
IHdvcmtlcnNFbmQgPSBtX3dvcmtlcnMuZW5kKCk7Ci0gICAgZm9yIChXb3JrZXJzTWFwOjppdGVy
YXRvciBpdCA9IG1fd29ya2Vycy5iZWdpbigpOyBpdCAhPSB3b3JrZXJzRW5kOyArK2l0KSB7Ci0g
ICAgICAgIEluc3BlY3RvcldvcmtlclJlc291cmNlKiB3b3JrZXIgPSBpdC0+c2Vjb25kLmdldCgp
OwotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3Jr
ZXItPnVybCgpLCB3b3JrZXItPmlzU2hhcmVkV29ya2VyKCkpOwotICAgIH0KLSNlbmRpZgotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3RvcmVEZWJ1Z2dlcigpCi17Ci0gICAgQVNT
RVJUKG1fZnJvbnRlbmQpOwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlm
IChJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpIHx8IG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd24gfHwgbV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0
b3JTZXR0aW5nczo6RGVidWdnZXJBbHdheXNFbmFibGVkKSkgewotICAgICAgICBlbmFibGVEZWJ1
Z2dlcihmYWxzZSk7Ci0gICAgICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBmYWxzZTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlUHJv
ZmlsZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9uIGFjdGlvbikKLXsKLSAgICBBU1NFUlQobV9mcm9u
dGVuZCk7Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgbV9wcm9maWxlckFn
ZW50LT5zZXRGcm9udGVuZChtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBpZiAoIVNjcmlwdFByb2Zp
bGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpICYmIG1fc2V0dGluZ3MtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU2V0dGluZ3M6OlByb2ZpbGVyQWx3YXlzRW5hYmxlZCkpCi0gICAgICAgIGVuYWJs
ZVByb2ZpbGVyKCk7Ci0gICAgaWYgKGFjdGlvbiA9PSBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50
KQotICAgICAgICBtX3Byb2ZpbGVyQWdlbnQtPnJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6dW5iaW5kQWxsUmVzb3VyY2VzKCkK
LXsKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChE
YXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJl
Z2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dW5i
aW5kKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgRE9NU3RvcmFnZVJl
c291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNl
cy5lbmQoKTsKLSAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9kb21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOwotI2VuZGlmCi0gICAgaWYgKG1fdGltZWxp
bmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5yZXNldCgpOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikK
LXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVz
b3VyY2VBZ2VudCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDb21taXRMb2FkKGxvYWRl
cik7Ci0gICAgCi0gICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBpZiAobG9hZGVy
LT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgaWYg
KG1fZnJvbnRlbmQpCi0gICAgICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2Vk
KGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOwotCi0gICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0
LT5kaXNjYXJkSW5qZWN0ZWRTY3JpcHRzKCk7Ci0gICAgICAgIG1fY29uc29sZUFnZW50LT5yZXNl
dCgpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2Rl
YnVnZ2VyQWdlbnQpIHsKLSAgICAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdl
TmF2aWdhdGlvbigpOwotICAgICAgICAgICAgaWYgKG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQpCi0g
ICAgICAgICAgICAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+aW5zcGVjdGVkVVJMQ2hhbmdl
ZChpbnNwZWN0ZWRVUkwoKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpICYmIFVTRShKU0MpCi0gICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3Rv
cFVzZXJJbml0aWF0ZWRQcm9maWxpbmcodHJ1ZSk7Ci0gICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+
cmVzZXRTdGF0ZSgpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNo
b3VsZCBiZSBjYWxsZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQotICAgICAgICAv
LyByZXNvdXJjZXMgYXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5k
IHRoZW0uCi0gICAgICAgIHVuYmluZEFsbFJlc291cmNlcygpOwotCi0gICAgICAgIGlmIChtX2Zy
b250ZW5kKSB7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXNldCgpOwotICAgICAgICAgICAg
bV9kb21BZ2VudC0+cmVzZXQoKTsKLSAgICAgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7Ci0g
ICAgICAgIH0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICAgICAgbV93b3JrZXJzLmNsZWFyKCk7
Ci0jZW5kaWYKLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIG1fZGF0YWJhc2VSZXNvdXJj
ZXMuY2xlYXIoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgbV9k
b21TdG9yYWdlUmVzb3VyY2VzLmNsZWFyKCk7Ci0jZW5kaWYKLQotICAgICAgICBpZiAobV9mcm9u
dGVuZCkKLSAgICAgICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudChEb2N1bWVudExvYWRl
ciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIWlz
TWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgdXJsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5kaWRNYXJrRE9N
Q29udGVudEV2ZW50KCk7Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQt
PmRvbUNvbnRlbnRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Om1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiBs
b2FkZXIsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhaXNNYWlu
UmVzb3VyY2VMb2FkZXIobG9hZGVyLCB1cmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV90aW1lbGluZUFnZW50KQotICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPmRpZE1hcmtMb2FkRXZl
bnQoKTsKLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+bG9hZEV2ZW50
RmlyZWQoY3VycmVudFRpbWUoKSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aXNN
YWluUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgcmVx
dWVzdFVybCkKLXsKLSAgICByZXR1cm4gbG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFn
ZS0+bWFpbkZyYW1lKCkgJiYgcmVxdWVzdFVybCA9PSBsb2FkZXItPnJlcXVlc3RVUkwoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9mcm9udGVuZCkgewotICAgICAgICAvLyBPbmx5IGVuYWJsZSBsb2FkIHRpbWlu
ZyBhbmQgcmF3IGhlYWRlcnMgaWYgZnJvbnQtZW5kIGlzIGF0dGFjaGVkLCBhcyBvdGhlcndpc2Ug
d2UgbWF5IHByb2R1Y2Ugb3ZlcmhlYWQuCi0gICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0TG9hZFRp
bWluZyh0cnVlKTsKLSAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOwot
Ci0gICAgICAgIGlmIChtX2V4dHJhSGVhZGVycykgewotICAgICAgICAgICAgSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9leHRyYUhlYWRlcnMtPmVuZCgpOwotICAgICAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fZXh0cmFIZWFkZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRI
VFRQSGVhZGVyRmllbGQoaXQtPmZpcnN0LCBpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCi17
Ci0gICAgaWYgKG1fc2V0dGluZ3MpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NldHRpbmdzID0g
bmV3IEluc3BlY3RvclNldHRpbmdzKG1fY2xpZW50KTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSLCBtX3NldHRpbmdzLT5nZXRCb29sZWFuKElu
c3BlY3RvclNldHRpbmdzOjpNb25pdG9yaW5nWEhSRW5hYmxlZCkpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCi17Ci0gICAgaWYgKCFlbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fdGltZWxpbmVBZ2VudCA9IG5ldyBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50KG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBt
X2Zyb250ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RhcnRlZCgpOwotCi0gICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUp
OwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkK
LXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3Rp
bWVsaW5lQWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7
Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmls
ZXJXYXNTdG9wcGVkKCk7Ci0KLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
Ojp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCwgZmFsc2UpOwotfQotCi0jaWYgRU5BQkxFKFdPUktF
UlMpCi1jbGFzcyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2sgOiBwdWJsaWMg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpXb3JrZXJBY3Rpb24gYWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2sod29ya2VyLCBhY3Rpb24pOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2soUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JDb250cm9sbGVy
OjpXb3JrZXJBY3Rpb24gYWN0aW9uKQotICAgICAgICA6IG1fd29ya2VyKHdvcmtlcikKLSAgICAg
ICAgLCBtX2FjdGlvbihhY3Rpb24pCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQotICAgIHsK
LSAgICAgICAgaWYgKHNjcmlwdENvbnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAgICAg
aWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oc2NyaXB0Q29udGV4dCktPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAg
ICAgICAgICAgIGluc3BlY3Rvci0+cG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoKm1f
d29ya2VyLCBtX2FjdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiBtX3dvcmtlcjsKLSAgICBJbnNwZWN0b3JDb250
cm9sbGVyOjpXb3JrZXJBY3Rpb24gbV9hY3Rpb247Ci19OwotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kKGNvbnN0IEluc3BlY3Rvcldv
cmtlclJlc291cmNlJiB3b3JrZXIsIEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckFjdGlvbiBh
Y3Rpb24pCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0jaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNl
IEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckNyZWF0ZWQ6Ci0gICAgICAgIG1fZnJvbnRlbmQt
PmRpZENyZWF0ZVdvcmtlcih3b3JrZXIuaWQoKSwgd29ya2VyLnVybCgpLCB3b3JrZXIuaXNTaGFy
ZWRXb3JrZXIoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxl
cjo6V29ya2VyRGVzdHJveWVkOgotICAgICAgICBtX2Zyb250ZW5kLT5kaWREZXN0cm95V29ya2Vy
KHdvcmtlci5pZCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcikKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3
b3JrZXJSZXNvdXJjZShJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlz
U2hhcmVkV29ya2VyKSk7Ci0gICAgbV93b3JrZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwot
ICAgIGlmIChtX2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UsIEluc3BlY3RvckNv
bnRyb2xsZXI6OldvcmtlckNyZWF0ZWQpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWREZXN0cm95V29ya2VyKGludHB0cl90IGlkKQotewotICAgIGlmICghZW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJSZXNvdXJj
ZSA9IG1fd29ya2Vycy5maW5kKGlkKTsKLSAgICBpZiAod29ya2VyUmVzb3VyY2UgPT0gbV93b3Jr
ZXJzLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSAmJiBt
X2Zyb250ZW5kKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVu
dCgpLT5wb3N0VGFzayhQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OmNyZWF0
ZSh3b3JrZXJSZXNvdXJjZS0+c2Vjb25kLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJEZXN0
cm95ZWQpKTsKLSAgICBtX3dvcmtlcnMucmVtb3ZlKHdvcmtlclJlc291cmNlKTsKLX0KLSNlbmRp
ZiAvLyBFTkFCTEUoV09SS0VSUykKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFi
YXNlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3Rv
ckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0ZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9u
KTsKLQotICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuc2V0KHJlc291cmNlLT5pZCgpLCByZXNvdXJj
ZSk7Ci0KLSAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KLSAg
ICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQo
KSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5n
KQotewotICAgIC8vIElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCi0gICAgTGlzdEhhc2hTZXQ8
Q29va2llPiByYXdDb29raWVzTGlzdDsKLQotICAgIC8vIElmIHdlIGNhbid0IGdldCByYXcgY29v
a2llcyAtIGZhbGwgYmFjayB0byBTdHJpbmcgcmVwcmVzZW50YXRpb24KLSAgICBTdHJpbmcgc3Ry
aW5nQ29va2llc0xpc3Q7Ci0KLSAgICAvLyBSZXR1cm4gdmFsdWUgdG8gZ2V0UmF3Q29va2llcyBz
aG91bGQgYmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwgYmVjYXVzZQotICAgIC8vIHRoZSByZXR1
cm4gdmFsdWUgaXMgcGxhdGZvcm0vbmV0d29yayBiYWNrZW5kIHNwZWNpZmljLCBhbmQgdGhlIGNh
bGwgd2lsbAotICAgIC8vIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgdHJ1ZS9mYWxzZSB2YWx1ZS4K
LSAgICBib29sIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGZhbHNlOwotCi0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkp
IHsKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAg
ICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxS
ZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVz
b3VyY2VzKCk7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNl
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29va2llc0xpc3Q7Ci0gICAgICAgICAgICByYXdDb29r
aWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgaXQtPnNlY29uZC0+dXJsKCkpLCBkb2NDb29raWVzTGlzdCk7Ci0KLSAgICAgICAgICAg
IGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRp
b24gb2YgY29va2llcy4KLSAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgICAgICAgICBzdHJpbmdDb29raWVzTGlzdCArPSBkb2N1bWVudC0+Y29va2llKGVjKTsK
LSAgICAgICAgICAgICAgICAvLyBFeGNlcHRpb25zIGFyZSB0aHJvd24gYnkgY29va2llKCkgaW4g
c2FuZGJveGVkIGZyYW1lcy4gVGhhdCB3b24ndCBoYXBwZW4gaGVyZQotICAgICAgICAgICAgICAg
IC8vIGJlY2F1c2UgImRvY3VtZW50IiBpcyB0aGUgZG9jdW1lbnQgb2YgdGhlIG1haW4gZnJhbWUg
b2YgdGhlIHBhZ2UuCi0gICAgICAgICAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGludCBjb29raWVzU2l6ZSA9IGRvY0Nvb2tpZXNMaXN0
LnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXNTaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzTGlzdC5jb250YWlu
cyhkb2NDb29raWVzTGlzdFtpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByYXdDb29raWVz
TGlzdC5hZGQoZG9jQ29va2llc0xpc3RbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyYXdDb29raWVzSW1wbGVtZW50ZWQp
Ci0gICAgICAgICpjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMocmF3Q29va2llc0xpc3Qp
OwotICAgIGVsc2UKLSAgICAgICAgKmNvb2tpZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdDsK
LX0KLQotUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVp
bGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCi17Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjb29raWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOwotCi0gICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgZW5kID0gY29va2llc0xp
c3QuZW5kKCk7Ci0gICAgTGlzdEhhc2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgaXQgPSBjb29raWVz
TGlzdC5iZWdpbigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQsIGkrKykK
LSAgICAgICAgY29va2llcy0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvckNvb2tpZSgqaXQpKTsK
LQotICAgIHJldHVybiBjb29raWVzOwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBj
b29raWUpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoIm5hbWUiLCBjb29raWUubmFt
ZSk7Ci0gICAgdmFsdWUtPnNldFN0cmluZygidmFsdWUiLCBjb29raWUudmFsdWUpOwotICAgIHZh
bHVlLT5zZXRTdHJpbmcoImRvbWFpbiIsIGNvb2tpZS5kb21haW4pOwotICAgIHZhbHVlLT5zZXRT
dHJpbmcoInBhdGgiLCBjb29raWUucGF0aCk7Ci0gICAgdmFsdWUtPnNldE51bWJlcigiZXhwaXJl
cyIsIGNvb2tpZS5leHBpcmVzKTsKLSAgICB2YWx1ZS0+c2V0TnVtYmVyKCJzaXplIiwgKGNvb2tp
ZS5uYW1lLmxlbmd0aCgpICsgY29va2llLnZhbHVlLmxlbmd0aCgpKSk7Ci0gICAgdmFsdWUtPnNl
dEJvb2xlYW4oImh0dHBPbmx5IiwgY29va2llLmh0dHBPbmx5KTsKLSAgICB2YWx1ZS0+c2V0Qm9v
bGVhbigic2VjdXJlIiwgY29va2llLnNlY3VyZSk7Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oInNl
c3Npb24iLCBjb29raWUuc2Vzc2lvbik7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUs
IGNvbnN0IFN0cmluZyYgZG9tYWluKQotewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9pbnNw
ZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZG9jdW1lbnQt
PnVybCgpLmhvc3QoKSAhPSBkb21haW4pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Y29uc3QgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291
cmNlcyA9IGRvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJj
ZXMoKTsKLSAgICAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9yIChD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBhbGxSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
V2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQt
PnNlY29uZC0+dXJsKCkpLCBjb29raWVOYW1lKTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoRE9N
X1NUT1JBR0UpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3Rv
cmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUp
Ci17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVN0b3Jh
Z2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNv
dXJjZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBp
dCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyAr
K2l0KQotICAgICAgICBpZiAoaXQtPnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlz
TG9jYWxTdG9yYWdlKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTdG9yYWdl
PiBkb21TdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7Ci0gICAg
UmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2U6OmNyZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFn
ZSwgZnJhbWUpOwotCi0gICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLnNldChyZXNvdXJjZS0+aWQo
KSwgcmVzb3VyY2UpOwotCi0gICAgLy8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxlIHZp
c2libGUuCi0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJv
bnRlbmQuZ2V0KCkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJM
KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1f
aW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBpZiAobV9yZXNvdXJjZUFnZW50KQotICAgICAgICBtX3Jl
c291cmNlQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJMKTsK
LSAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnRVUkwpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIGNvbnN0IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0g
ICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50LT53aWxsU2Vu
ZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2UmIHJlc3BvbnNlKQotewotICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1f
cmVzb3VyY2VBZ2VudC0+ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKGlkZW50
aWZpZXIsIHJlc3BvbnNlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbG9z
ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKG1fcmVzb3Vy
Y2VBZ2VudCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVu
dGlmaWVyKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0KLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRp
bmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvZmlsZXJB
Z2VudC0+aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpCi17Ci0gICAgaWYg
KCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0YXJ0
VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIHRydWUpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAo
IWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCBmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5h
YmxlZCgpICYmIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmVuYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBp
bGUpCi17Ci0gICAgaWYgKGFsd2F5cykKLSAgICAgICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVhbihJ
bnNwZWN0b3JTZXR0aW5nczo6UHJvZmlsZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKLSAgICBtX3By
b2ZpbGVyQWdlbnQtPmVuYWJsZShza2lwUmVjb21waWxlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCi17Ci0gICAgaWYgKGFsd2F5
cykKLSAgICAgICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6UHJv
ZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSk7Ci0gICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxl
KCk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQotewotICAgIGlmICgh
ZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZGVidWdnZXJFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAgICBtX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duID0gdHJ1ZTsKLSAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQ
YW5lbCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVuYWJsZURlYnVnZ2VyKGZhbHNlKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKLXsK
LSAgICBBU1NFUlQoIWRlYnVnZ2VyRW5hYmxlZCgpKTsKLSAgICBpZiAoYWx3YXlzKQotICAgICAg
ICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFsd2F5
c0VuYWJsZWQsIHRydWUpOwotCi0gICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBt
X2RlYnVnZ2VyQWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9m
cm9udGVuZC5nZXQoKSk7Ci0gICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcyk7Ci0gICAgbV9icm93c2VyRGVidWdnZXJB
Z2VudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKSk7Ci0KLSAgICBtX2Zyb250
ZW5kLT5kZWJ1Z2dlcldhc0VuYWJsZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChhbHdheXMpCi0gICAgICAgIG1fc2V0dGluZ3MtPnNl
dEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OkRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2Up
OwotCi0gICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnQu
Y2xlYXIoKTsKLSAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmNsZWFyKCk7Ci0KLSAgICBtX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7Ci0KLSAgICBpZiAobV9mcm9udGVuZCkKLSAg
ICAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlc3VtZSgpCi17Ci0gICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5yZXN1bWUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGJyZWFrcG9pbnRzKQotewotICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0
ZTo6YnJvd3NlckJyZWFrcG9pbnRzLCBicmVha3BvaW50cyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKLXsKLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAg
bV9mcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7Ci0g
ICAgZWxzZQotICAgICAgICBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5hcHBlbmQocGFp
cjxsb25nLCBTdHJpbmc+KGNhbGxJZCwgc2NyaXB0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBqc29uUmVzdWx0KQotewotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNj
cmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2luc3BlY3RlZFBhZ2UpOwotICAg
IFNjcmlwdE9iamVjdCB3aW5kb3c7Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoc2NyaXB0
U3RhdGUsICJ3aW5kb3ciLCB3aW5kb3cpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bih3aW5kb3csICJkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kIik7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoY2FsbElkKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChqc29u
UmVzdWx0KTsKLSAgICBmdW5jdGlvbi5jYWxsKCk7Ci19Ci0KLXN0YXRpYyBQYXRoIHF1YWRUb1Bh
dGgoY29uc3QgRmxvYXRRdWFkJiBxdWFkKQotewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVh
ZFBhdGgubW92ZVRvKHF1YWQucDEoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIo
KSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRk
TGluZVRvKHF1YWQucDQoKSk7Ci0gICAgcXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0
dXJuIHF1YWRQYXRoOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmls
bENvbG9yKQotewotICAgIHN0YXRpYyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7Ci0g
ICAgc3RhdGljIGNvbnN0IENvbG9yIG91dGxpbmVDb2xvcig2MiwgODYsIDE4MCwgMjI4KTsKLQot
ICAgIFBhdGggcXVhZFBhdGggPSBxdWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8gQ2xpcCBvdXQg
dGhlIHF1YWQsIHRoZW4gZHJhdyB3aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAotICAg
IC8vIG9mIG91dGxpbmUgKGJlY2F1c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQotICAgIHsK
LSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0
aCk7Ci0KLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVz
cyk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKLSAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKLQot
ICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZp
bGwKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwotICAgIGNvbnRleHQuZmlsbFBhdGgocXVhZFBhdGgpOwotfQotCi1zdGF0aWMgdm9pZCBk
cmF3T3V0bGluZWRRdWFkV2l0aENsaXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFF1YWQmIHF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBm
aWxsQ29sb3IpCi17Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgUGF0aCBjbGlwUXVhZFBhdGgg
PSBxdWFkVG9QYXRoKGNsaXBRdWFkKTsKLSAgICBjb250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRo
KTsKLSAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvcik7Ci0gICAg
Y29udGV4dC5yZXN0b3JlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdIaWdobGlnaHRGb3JCb3go
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBj
b25zdCBGbG9hdFF1YWQmIHBhZGRpbmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQs
IGNvbnN0IEZsb2F0UXVhZCYgbWFyZ2luUXVhZCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3Ig
Y29udGVudEJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7Ci0gICAgc3RhdGljIGNvbnN0IENv
bG9yIHBhZGRpbmdCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxNjApOwotICAgIHN0YXRpYyBjb25z
dCBDb2xvciBib3JkZXJCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxOTIpOwotICAgIHN0YXRpYyBj
b25zdCBDb2xvciBtYXJnaW5Cb3hDb2xvcigxMjUsIDE3MywgMjE3LCAyMjgpOwotCi0gICAgaWYg
KG1hcmdpblF1YWQgIT0gYm9yZGVyUXVhZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwKGNvbnRleHQsIG1hcmdpblF1YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENvbG9yKTsKLSAg
ICBpZiAoYm9yZGVyUXVhZCAhPSBwYWRkaW5nUXVhZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVh
ZFdpdGhDbGlwKGNvbnRleHQsIGJvcmRlclF1YWQsIHBhZGRpbmdRdWFkLCBib3JkZXJCb3hDb2xv
cik7Ci0gICAgaWYgKHBhZGRpbmdRdWFkICE9IGNvbnRlbnRRdWFkKQotICAgICAgICBkcmF3T3V0
bGluZWRRdWFkV2l0aENsaXAoY29udGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBwYWRk
aW5nQm94Q29sb3IpOwotCi0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50UXVh
ZCwgY29udGVudEJveENvbG9yKTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd0hpZ2hsaWdodEZvckxp
bmVCb3hlc09yU1ZHUmVuZGVyZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0
b3I8RmxvYXRRdWFkPiYgbGluZUJveFF1YWRzKQotewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBs
aW5lQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTI4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBkcmF3T3V0bGluZWRRdWFk
KGNvbnRleHQsIGxpbmVCb3hRdWFkc1tpXSwgbGluZUJveENvbG9yKTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGNvbnZlcnRGcm9tRnJhbWVUb01haW5GcmFtZShGcmFtZSogZnJhbWUsIEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgcmVjdCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KEZy
YW1lKiBmcmFtZSkKLXsKLSAgICBJbnRQb2ludCBtYWluRnJhbWVQb2ludCA9IGZyYW1lLT5wYWdl
KCktPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhJbnRQb2ludCgpKSk7Ci0gICAgcmV0dXJuIG1haW5GcmFtZVBvaW50
IC0gSW50UG9pbnQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhp
Z2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hp
Z2hsaWdodGVkTm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG1faGlnaGxpZ2h0ZWROb2RlLT5yZW5kZXJlcigpOwotICAgIEZyYW1lKiBjb250YWlu
aW5nRnJhbWUgPSBtX2hpZ2hsaWdodGVkTm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFjb250YWluaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJhbWVUb01haW5GcmFtZU9mZnNldChjb250YWlu
aW5nRnJhbWUpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QodHJ1ZSk7Ci0gICAgYm91bmRpbmdCb3gubW92ZShtYWluRnJhbWVPZmZz
ZXQpOwotCi0gICAgSW50UmVjdCB0aXRsZVJlZmVyZW5jZUJveCA9IGJvdW5kaW5nQm94OwotCi0g
ICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2lu
c3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IG92ZXJsYXlS
ZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgaWYgKCFvdmVybGF5UmVjdC5j
b250YWlucyhib3VuZGluZ0JveCkgJiYgIWJvdW5kaW5nQm94LmNvbnRhaW5zKGVuY2xvc2luZ0lu
dFJlY3Qob3ZlcmxheVJlY3QpKSkKLSAgICAgICAgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxl
Q29udGVudFJlY3QoKTsKLSAgICBjb250ZXh0LnRyYW5zbGF0ZSgtb3ZlcmxheVJlY3QueCgpLCAt
b3ZlcmxheVJlY3QueSgpKTsKLQotICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hs
aWdodGVkIHRocm91Z2ggdGhlIGlzQm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1l
bnRzIHNob3VsZCBqdXN0IGR1bXAgdGhlaXIgYWJzb2x1dGVRdWFkcygpLgotI2lmIEVOQUJMRShT
VkcpCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJl
ci0+bm9kZSgpLT5pc1NWR0VsZW1lbnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOwotI2Vs
c2UKLSAgICBib29sIGlzU1ZHUmVuZGVyZXIgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKHJl
bmRlcmVyLT5pc0JveCgpICYmICFpc1NWR1JlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlckJveCog
cmVuZGVyQm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOwotCi0gICAgICAgIEludFJlY3QgY29u
dGVudEJveCA9IHJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKLQotICAgICAgICBJbnRSZWN0
IHBhZGRpbmdCb3goY29udGVudEJveC54KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCksIGNv
bnRlbnRCb3gueSgpIC0gcmVuZGVyQm94LT5wYWRkaW5nVG9wKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZW50Qm94LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkg
KyByZW5kZXJCb3gtPnBhZGRpbmdSaWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVy
Qm94LT5wYWRkaW5nVG9wKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAg
IEludFJlY3QgYm9yZGVyQm94KHBhZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0
KCksIHBhZGRpbmdCb3gueSgpIC0gcmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFkZGluZ0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0
KCkgKyByZW5kZXJCb3gtPmJvcmRlclJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpICsgcmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgICAg
IEludFJlY3QgbWFyZ2luQm94KGJvcmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQo
KSwgYm9yZGVyQm94LnkoKSAtIHJlbmRlckJveC0+bWFyZ2luVG9wKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvcmRlckJveC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCkg
KyByZW5kZXJCb3gtPm1hcmdpblJpZ2h0KCksIGJvcmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJv
eC0+bWFyZ2luVG9wKCkgKyByZW5kZXJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKLQotICAgICAgICB0
aXRsZVJlZmVyZW5jZUJveCA9IG1hcmdpbkJveDsKLSAgICAgICAgdGl0bGVSZWZlcmVuY2VCb3gu
bW92ZShtYWluRnJhbWVPZmZzZXQpOwotICAgICAgICB0aXRsZVJlZmVyZW5jZUJveC5tb3ZlKGJv
dW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgpKTsKLQotICAgICAgICBGbG9hdFF1YWQgYWJz
Q29udGVudFF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNv
bnRlbnRCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChwYWRkaW5nQm94KSk7Ci0gICAgICAgIEZs
b2F0UXVhZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UmVjdChib3JkZXJCb3gpKTsKLSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSBy
ZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwotCi0g
ICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJz
UGFkZGluZ1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwotICAgICAgICBhYnNCb3JkZXJRdWFk
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJzTWFyZ2luUXVhZC5tb3ZlKG1haW5G
cmFtZU9mZnNldCk7Ci0KLSAgICAgICAgZHJhd0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnND
b250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQp
OwotICAgIH0gZWxzZSBpZiAocmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkgfHwgaXNTVkdSZW5k
ZXJlcikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5n
L2JvcmRlciBmb3IgaW5saW5lcy4KLSAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gbGluZUJveFF1
YWRzOwotICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbGluZUJveFF1YWRzW2ldICs9IG1haW5GcmFtZU9mZnNldDsKLQotICAgICAg
ICBkcmF3SGlnaGxpZ2h0Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcihjb250ZXh0LCBsaW5lQm94
UXVhZHMpOwotICAgIH0KLQotICAgIC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0K
LSAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFt
ZS0+c2V0dGluZ3MoKTsKLSAgICBkcmF3RWxlbWVudFRpdGxlKGNvbnRleHQsIHRpdGxlUmVmZXJl
bmNlQm94LCBvdmVybGF5UmVjdCwgc2V0dGluZ3MpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29y
ZTo6U2V0dGluZ3MqIHNldHRpbmdzKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBpbnQgcmVj
dEluZmxhdGVQeCA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsK
LSAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlcldpZHRoUHggPSAxOwotICAgIHN0YXRpYyBjb25z
dCBDb2xvciB0b29sdGlwQmFja2dyb3VuZENvbG9yKDI1NSwgMjU1LCAxOTQsIDI1NSk7Ci0gICAg
c3RhdGljIGNvbnN0IENvbG9yIHRvb2x0aXBCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOwotICAg
IHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwRm9udENvbG9yKENvbG9yOjpibGFjayk7Ci0KLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1faGlnaGxpZ2h0ZWRO
b2RlLmdldCgpKTsKLSAgICBib29sIGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hI
VE1MRG9jdW1lbnQoKTsKLSAgICBTdHJpbmcgbm9kZVRpdGxlID0gaXNYSFRNTCA/IGVsZW1lbnQt
Pm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFtZSgpLmxvd2VyKCk7Ci0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICBpZiAo
IWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG5vZGVU
aXRsZSArPSAiIyI7Ci0gICAgICAgIG5vZGVUaXRsZSArPSBpZFZhbHVlOwotICAgIH0KLSAgICBp
ZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewot
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNp
emVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAgICBp
ZiAoY2xhc3NOYW1lQ291bnQpIHsKLSAgICAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1
c2VkQ2xhc3NOYW1lczsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NO
YW1lQ291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xh
c3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodXNlZENs
YXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgdXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAg
ICAgICAgICAgICAgbm9kZVRpdGxlICs9ICIuIjsKLSAgICAgICAgICAgICAgICBub2RlVGl0bGUg
Kz0gY2xhc3NOYW1lOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgRWxl
bWVudCogaGlnaGxpZ2h0ZWRFbGVtZW50ID0gbV9oaWdobGlnaHRlZE5vZGUtPmlzRWxlbWVudE5v
ZGUoKSA/IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSkgOiAw
OwotICAgIG5vZGVUaXRsZSArPSAiIFsiOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJl
cihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdobGlnaHRlZEVsZW1lbnQtPm9mZnNldFdpZHRoKCkg
OiBib3VuZGluZ0JveC53aWR0aCgpKTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHN0YXRpY19jYXN0
PFVDaGFyPigweDAwRDcpKTsgLy8gJnRpbWVzOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51
bWJlcihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdobGlnaHRlZEVsZW1lbnQtPm9mZnNldEhlaWdo
dCgpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwotICAgIG5vZGVUaXRsZSArPSAiXSI7Ci0KLSAg
ICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICBGb250RmFtaWx5IGZhbWlseTsKLSAgICBmYW1p
bHkuc2V0RmFtaWx5KHNldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKSk7Ci0gICAgZGVzYy5zZXRG
YW1pbHkoZmFtaWx5KTsKLSAgICBkZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOwot
ICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0K
LSAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUpOwotICAgIEludFBvaW50IHRpdGxl
QmFzZVBvaW50ID0gYm91bmRpbmdCb3guYm90dG9tTGVmdCgpOwotICAgIHRpdGxlQmFzZVBvaW50
Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdEluZmxhdGVQeCk7Ci0gICAgSW50UmVjdCB0aXRsZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxl
UnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhlaWdodFB4KSk7Ci0gICAgdGl0bGVSZWN0LmluZmxh
dGUocmVjdEluZmxhdGVQeCk7Ci0KLSAgICAvLyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0
byBjb21wZW5zYXRlIGZvciBhIDFweC10aGljayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3Qg
YSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgotICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4Owot
ICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBi
ZXlvbmQgdGhlIHJpZ2h0IG9mIG92ZXJsYXlSZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGgg
dGhlIHNhaWQgYm91bmRhcnkuCi0gICAgaWYgKHRpdGxlUmVjdC5yaWdodCgpID4gb3ZlcmxheVJl
Y3QucmlnaHQoKSkKLSAgICAgICAgZHggPSBvdmVybGF5UmVjdC5yaWdodCgpIC0gdGl0bGVSZWN0
LnJpZ2h0KCk7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Yg
b3ZlcmxheVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5Lgot
ICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCi0gICAgICAgIGR4
ID0gb3ZlcmxheVJlY3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAg
ICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwg
c2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5i
b3R0b20oKSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdC
b3gueSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8g
SWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3Qs
IGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlm
ICh0aXRsZVJlY3QuYm90dG9tKCkgKyBkeSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgpKQotICAgICAg
ICAgICAgZHkgPSBvdmVybGF5UmVjdC5ib3R0b20oKSAtIHRpdGxlUmVjdC5ib3R0b20oKTsKLSAg
ICB9Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5
UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBvdmVybGF5UmVjdC4KLSAgICBpZiAodGl0bGVS
ZWN0LnkoKSArIGR5IDwgb3ZlcmxheVJlY3QueSgpKQotICAgICAgICBkeSA9IG92ZXJsYXlSZWN0
LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1v
dmUoZHgsIGR5KTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHRvb2x0aXBCb3JkZXJDb2xv
ciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
Ym9yZGVyV2lkdGhQeCk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IodG9vbHRpcEJhY2tncm91
bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3UmVjdCh0aXRs
ZVJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRvb2x0aXBGb250Q29sb3IsIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZHJhd1RleHQoZm9udCwgbm9kZVRpdGxlUnVu
LCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSAr
IGZvbnQuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpvcGVuSW5J
bnNwZWN0ZWRXaW5kb3coY29uc3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgRnJhbWUqIG1haW5GcmFt
ZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0KLSAgICBGcmFtZUxvYWRSZXF1ZXN0
IHJlcXVlc3QobWFpbkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJj
ZVJlcXVlc3QoKSwgIl9ibGFuayIpOwotCi0gICAgYm9vbCBjcmVhdGVkOwotICAgIFdpbmRvd0Zl
YXR1cmVzIHdpbmRvd0ZlYXR1cmVzOwotICAgIEZyYW1lKiBuZXdGcmFtZSA9IFdlYkNvcmU6OmNy
ZWF0ZVdpbmRvdyhtYWluRnJhbWUsIG1haW5GcmFtZSwgcmVxdWVzdCwgd2luZG93RmVhdHVyZXMs
IGNyZWF0ZWQpOwotICAgIGlmICghbmV3RnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKTsKLSAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcihtYWluRnJhbWUpOwotICAg
IG5ld0ZyYW1lLT5wYWdlKCktPnNldE9wZW5lZEJ5RE9NKCk7Ci0gICAgbmV3RnJhbWUtPmxvYWRl
cigpLT5jaGFuZ2VMb2NhdGlvbihtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksIG5ld0ZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxz
ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9u
TG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSkKLXsKLSAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25M
b2FkLmFwcGVuZChzb3VyY2UpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92
ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCkKLXsKLSAgICBtX3NjcmlwdHNUb0V2YWx1YXRl
T25Mb2FkLmNsZWFyKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVj
dG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNlKQotewotICAgIG1faW5zcGVjdG9y
RXh0ZW5zaW9uQVBJID0gc291cmNlOwotfQotCi1LVVJMIEluc3BlY3RvckNvbnRyb2xsZXI6Omlu
c3BlY3RlZFVSTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZy
YW1lKCktPmxvYWRlcigpLT51cmwoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZWxvYWRQYWdlKCkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvIHdlIHNldCB0aGUgdXNlciBnZXN0
dXJlIGluZGljYXRvciBoZXJlPwotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihE
ZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPm1h
aW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaCgpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gaGVhZGVycykKKy8vIEZJWE1FOiB0ZW1wb3Jhcnkgc29sdXRpb24uIEl0
IHdpbGwgYmVjb21lIGEgc2VwYXJhdGUgY2xhc3MgaW4gdGhlIG5leHQgcGF0Y2ggYW5kIENvbnRy
b2xsZXIgcmVsYXRlZCBzdWJzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgbW92ZWQgZnJvbSBJbnNw
ZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sZXIuCitJbnNwZWN0b3JDb250cm9sbGVyOjpJ
bnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9y
Q2xpZW50KQorICAgIDogSW5zcGVjdG9yQWdlbnQodGhpcywgcGFnZSwgaW5zcGVjdG9yQ2xpZW50
KQogewotICAgIG1fZXh0cmFIZWFkZXJzID0gYWRvcHRQdHIobmV3IEhUVFBIZWFkZXJNYXAoKSk7
Ci0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQo
KTsKLSAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJz
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAg
ICAgICBpZiAoIWl0LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgbV9leHRyYUhlYWRlcnMtPmFkZChpdC0+Zmlyc3QsIHZhbHVlKTsKLSAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDkwYTAzMDAuLjQyZTk2MTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMSwz
NjUgKzEsNDkgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYg
SW5zcGVjdG9yQ29udHJvbGxlcl9oCiAjZGVmaW5lIEluc3BlY3RvckNvbnRyb2xsZXJfaAogCi0j
aW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgotI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1jbGFzcyBDaGFyYWN0ZXJEYXRhOwotY2xhc3MgRGF0YWJh
c2U7Ci1jbGFzcyBET01XcmFwcGVyV29ybGQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3Vt
ZW50TG9hZGVyOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xh
c3MgSFRUUEhlYWRlck1hcDsKLWNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBJbmplY3RlZFNj
cmlwdDsKLWNsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKLWNsYXNzIEluc3BlY3RvckFycmF5Owot
Y2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7Ci1jbGFzcyBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudDsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKLWNsYXNzIEluc3BlY3RvckNv
bnNvbGVBZ2VudDsKLWNsYXNzIEluc3BlY3RvckNTU0FnZW50OwotY2xhc3MgSW5zcGVjdG9yRE9N
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2U7Ci1jbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OwotY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7
Ci1jbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKLWNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50
OwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsK
LWNsYXNzIEluc3BlY3RvclJlc291cmNlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ7Ci1jbGFzcyBJbnNwZWN0b3JTZXR0aW5nczsKLWNsYXNzIEluc3BlY3RvclN0YXRlOwotY2xh
c3MgSW5zcGVjdG9yU3RvcmFnZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsK
LWNsYXNzIEluc3BlY3RvclZhbHVlOwotY2xhc3MgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2U7Ci1j
bGFzcyBJbnRSZWN0OwotY2xhc3MgS1VSTDsKLWNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwotY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFJlc291
cmNlRXJyb3I7Ci1jbGFzcyBTY3JpcHRBcmd1bWVudHM7Ci1jbGFzcyBTY3JpcHRDYWxsU3RhY2s7
Ci1jbGFzcyBTY3JpcHRQcm9maWxlOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU3RvcmFn
ZUFyZWE7CiAKLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotY2xhc3MgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCi1jbGFzcyBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ7Ci0jZW5kaWYKLQotI2lmIEVO
QUJMRShXRUJfU09DS0VUUykKLWNsYXNzIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q7Ci1jbGFz
cyBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZTsKLSNlbmRpZgotCi1jbGFzcyBJbnNwZWN0b3JD
b250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDb250cm9sbGVy
KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisvLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9u
LiBJdCB3aWxsIGJlY29tZSBhIHNlcGFyYXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBj
b250cm9sbGVyIHJlbGF0ZWQgc3Vic2V0IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20g
SW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJvbGVyLgorY2xhc3MgSW5zcGVjdG9yQ29u
dHJvbGxlciA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgRWxlbWVudHNQYW5lbDsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgUHJvZmlsZXNQ
YW5lbDsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgU2NyaXB0c1BhbmVsOwotCiAgICAg
SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVjdG9yQ2xpZW50Kik7Ci0gICAgfkluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKLQotICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigpIHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlw
dEhvc3QoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQotCi0gICAgdm9p
ZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCk7Ci0KLSAgICBib29sIGVuYWJsZWQoKSBjb25zdDsK
LQotICAgIFBhZ2UqIGluc3BlY3RlZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBh
Z2U7IH0KLSAgICBLVVJMIGluc3BlY3RlZFVSTCgpIGNvbnN0OwotICAgIHZvaWQgcmVsb2FkUGFn
ZSgpOwotCi0gICAgdm9pZCByZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0
cmluZyYgaW5zcGVjdG9yQ29va2llKTsKLQotICAgIHZvaWQgaW5zcGVjdChOb2RlKik7Ci0gICAg
dm9pZCBoaWdobGlnaHQoTm9kZSopOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZv
aWQgaGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJZCk7Ci0gICAgdm9pZCBoaWRlRE9NTm9kZUhp
Z2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdodCgpOyB9Ci0KLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1l
KHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7Ci0gICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKSB7
IGhpZGVIaWdobGlnaHQoKTsgfQotCi0gICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBzaG93UGFu
ZWwoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBjb25uZWN0
RnJvbnRlbmQoKTsKLSAgICB2b2lkIHJldXNlRnJvbnRlbmQoKTsKLSAgICB2b2lkIGRpc2Nvbm5l
Y3RGcm9udGVuZCgpOwotICAgIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJvbnRlbmQuZ2V0KCk7IH0KLQotICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQq
IHJlc291cmNlQWdlbnQoKTsKLQotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckFn
ZW50KCkgeyByZXR1cm4gdGhpczsgfQotICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29s
ZUFnZW50KCkgeyByZXR1cm4gbV9jb25zb2xlQWdlbnQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JD
U1NBZ2VudCogY3NzQWdlbnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9Ci0gICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQot
ICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRBZ2VudCgpIHsgcmV0dXJuIG1f
aW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50KiBy
dW50aW1lQWdlbnQoKSB7IHJldHVybiBtX3J1bnRpbWVBZ2VudC5nZXQoKTsgfQotICAgIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQoKSB7IHJldHVybiBtX3RpbWVsaW5lQWdl
bnQuZ2V0KCk7IH0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCogZGF0YWJhc2VBZ2VudCgpIHsgcmV0dXJuIG1fZGF0YWJhc2VBZ2VudC5nZXQoKTsgfQot
I2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCogZG9tU3RvcmFnZUFnZW50KCkgeyByZXR1cm4gbV9kb21TdG9yYWdlQWdlbnQuZ2V0KCk7
IH0KLSNlbmRpZgotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICBJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQqIGZpbGVTeXN0ZW1BZ2VudCgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbUFnZW50Lmdl
dCgpOyB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCogYnJvd3NlckRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7
IHJldHVybiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2Vu
dC5nZXQoKTsgfQotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQoKSBj
b25zdCB7IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQuZ2V0KCk7IH0KLSNlbmRpZgotI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5nZXQoKTsgfQotI2VuZGlmCi0KLQotICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUlu
UGFnZSgpIGNvbnN0OwotICAgIHZvaWQgbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0
VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1vZGlmaWVyRmxhZ3MpOwotICAgIGJvb2wgaGFuZGxlTW91
c2VQcmVzcygpOwotCi0gICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3du
UHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBjbGllbnQpOwotICAgIGJvb2wgaGFzSW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xp
ZW50OyB9Ci0KLSAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERP
TVdyYXBwZXJXb3JsZCopOwotCi0gICAgdm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVy
Kik7Ci0KLSAgICB2b2lkIHNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4pOwotCi0gICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKLSAgICB2b2lkIHN0b3BU
aW1lbGluZVByb2ZpbGVyKCk7Ci0KLSAgICB2b2lkIGdldENvb2tpZXMoUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpOwotICAgIHZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21h
aW4pOwotCi0gICAgdm9pZCBtYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRl
ciosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2
ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOwotCi0jaWYgRU5BQkxFKFdPUktFUlMp
Ci0gICAgZW51bSBXb3JrZXJBY3Rpb24geyBXb3JrZXJDcmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQg
fTsKLQotICAgIHZvaWQgcG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoY29uc3QgSW5z
cGVjdG9yV29ya2VyUmVzb3VyY2UmLCBXb3JrZXJBY3Rpb24pOwotICAgIHZvaWQgZGlkQ3JlYXRl
V29ya2VyKGludHB0cl90LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcik7
Ci0gICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludHB0cl90KTsKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKERBVEFCQVNFKQotICAgIHZvaWQgZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJh
c2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdm9p
ZCBkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2Fs
U3RvcmFnZSwgRnJhbWUqIGZyYW1lKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdFQl9TT0NLRVRT
KQotICAgIHZvaWQgZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwotICAgIHZv
aWQgd2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYpOwotICAgIHZvaWQgZGlkUmVj
ZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZENsb3NlV2Vi
U29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7Ci0jZW5kaWYKLQotICAgIGJvb2wgaGFz
RnJvbnRlbmQoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kOyB9Ci0KLSAgICB2b2lkIGRyYXdO
b2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotICAgIHZvaWQgb3BlbkluSW5z
cGVjdGVkV2luZG93KGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50VGl0
bGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZs
b2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikgY29uc3Q7Ci0KLSNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRp
YXRlZFByb2ZpbGUoKSBjb25zdDsKLSAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCkgeyBzdGFydFVz
ZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsgfQotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJv
ZmlsaW5nKCk7Ci0gICAgdm9pZCBzdG9wUHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFBy
b2ZpbGluZygpOyB9Ci0gICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAg
IHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21w
aWxlID0gZmFsc2UpOwotICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFs
c2UpOwotICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNob3dB
bmRFbmFibGVEZWJ1Z2dlcigpOwotICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMp
OwotICAgIHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwotICAgIGJv
b2wgZGVidWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9Ci0g
ICAgdm9pZCByZXN1bWUoKTsKLQotICAgIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0jZW5kaWYKLQotICAgIC8vIEdlbmVyaWMgY29k
ZSBjYWxsZWQgZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgotICAgIHZvaWQgZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChsb25nIHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsK
LQotICAgIHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJj
ZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwotICAgIHZv
aWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNlKTsKLQotICAg
IGJvb2wgaW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKLSAgICB2b2lkIHNldEluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkKGJvb2wpOwotICAgIHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQo
bG9uZyBoZWlnaHQpOwotICAgIGxvbmcgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBjb25zdDsK
LQotICAgIEluc3BlY3RvclN0YXRlKiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGUuZ2V0KCk7IH0K
LSAgICBJbnNwZWN0b3JTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdl
dCgpOyB9Ci0KLSAgICAvLyBJbnNwZWN0b3JBZ2VudCBBUEkKLSAgICB2b2lkIGdldEluc3BlY3Rv
clN0YXRlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdGF0ZSk7Ci0gICAgdm9pZCBzZXRNb25p
dG9yaW5nWEhSRW5hYmxlZChib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKLSAgICB2b2lk
IHBvcHVsYXRlU2NyaXB0T2JqZWN0cygpOwotICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9t
IEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFsbHkuCi0gICAgdm9pZCBzZXRTZWFyY2hpbmdG
b3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwotICAgIHZvaWQgZGlkRXZhbHVh
dGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0
KTsKLQotICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbiBBUEkKLSAgICB2b2lkIGVuc3Vy
ZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1
ZXN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsK
LSAgICB2b2lkIHJlc3RvcmVEZWJ1Z2dlcigpOwotICAgIGVudW0gUHJvZmlsZXJSZXN0b3JlQWN0
aW9uIHsKLSAgICAgICAgUHJvZmlsZXJSZXN0b3JlTm9BY3Rpb24gPSAwLAotICAgICAgICBQcm9m
aWxlclJlc3RvcmVSZXNldEFnZW50ID0gMQotICAgIH07Ci0gICAgdm9pZCByZXN0b3JlUHJvZmls
ZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9uIGFjdGlvbik7Ci0gICAgdm9pZCB1bmJpbmRBbGxSZXNv
dXJjZXMoKTsKLSAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKLQot
ICAgIHZvaWQgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKLQotI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwot
I2VuZGlmCi0KLSAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JD
b29raWUoY29uc3QgQ29va2llJik7Ci0gICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVp
bGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYpOwotCi0gICAgdm9pZCBmb2N1
c05vZGUoKTsKLSAgICBib29sIGlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBs
b2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVcmwpOwotCi0gICAgUGFnZSogbV9pbnNwZWN0ZWRQ
YWdlOwotICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OwotICAgIGJvb2wgbV9v
cGVuaW5nRnJvbnRlbmQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5k
OwotICAgIE93blB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9jc3NBZ2VudDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0g
ICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQWdlbnQ+IG1fZGF0YWJhc2VBZ2VudDsKLSNlbmRp
ZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIFJlZlB0cjxJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ+IG1fZG9tU3RvcmFnZUFnZW50OwotI2VuZGlmCi0KLSAgICBPd25QdHI8SW5zcGVj
dG9yVGltZWxpbmVBZ2VudD4gbV90aW1lbGluZUFnZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JT
dGF0ZT4gbV9zdGF0ZTsKLSAgICBPd25QdHI8SW5zcGVjdG9yU2V0dGluZ3M+IG1fc2V0dGluZ3M7
Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIE93blB0cjxJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwotI2Vu
ZGlmCi0gICAgCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIFJlZlB0cjxJbnNwZWN0b3JG
aWxlU3lzdGVtQWdlbnQ+IG1fZmlsZVN5c3RlbUFnZW50OwotI2VuZGlmIAotCi0gICAgUmVmUHRy
PE5vZGU+IG1fbm9kZVRvRm9jdXM7Ci0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlQWdlbnQ+
IG1fcmVzb3VyY2VBZ2VudDsKLSAgICBPd25QdHI8SW5zcGVjdG9yUnVudGltZUFnZW50PiBtX3J1
bnRpbWVBZ2VudDsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8
aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4gPiBEYXRhYmFzZVJlc291cmNl
c01hcDsKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcCBtX2RhdGFiYXNlUmVzb3VyY2VzOwotI2Vu
ZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01h
cDsKLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNlczsKLSNl
bmRpZgotCi0gICAgU3RyaW5nIG1fc2hvd0FmdGVyVmlzaWJsZTsKLSAgICBSZWZQdHI8Tm9kZT4g
bV9oaWdobGlnaHRlZE5vZGU7Ci0gICAgT3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwotICAgIFJlZlB0cjxJbmplY3RlZFNjcmlw
dEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRIb3N0OwotICAgIE93blB0cjxJbnNwZWN0b3JDb25zb2xl
QWdlbnQ+IG1fY29uc29sZUFnZW50OwotCi0gICAgVmVjdG9yPHBhaXI8bG9uZywgU3RyaW5nPiA+
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQ7Ci0gICAgU3RyaW5nIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJ
OwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGJvb2wgbV9hdHRhY2hEZWJ1
Z2dlcldoZW5TaG93bjsKLSAgICBPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1
Z2dlckFnZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gbV9i
cm93c2VyRGVidWdnZXJBZ2VudDsKLSAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4g
bV9wcm9maWxlckFnZW50OwotI2VuZGlmCi0gICAgT3duUHRyPEhUVFBIZWFkZXJNYXA+IG1fZXh0
cmFIZWFkZXJzOwotI2lmIEVOQUJMRShXT1JLRVJTKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRw
dHJfdCwgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7Ci0KLSAg
ICBXb3JrZXJzTWFwIG1fd29ya2VyczsKLSNlbmRpZgogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfQogCiAjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
CmluZGV4IDM2YmNhYjguLjM4NTQwMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2lu
Y2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JG
cm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGFjZmJi
NmUuLjJmZmFhODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQwLDE4ICs0MCwxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckFnZW50
KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogewotICAgIE93
blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIsIGZyb250ZW5kKSk7CisgICAgT3du
UHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoaW5zcGVjdG9yQWdlbnQsIGZyb250ZW5kKSk7CiAgICAgU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLmNsZWFyQnJlYWtwb2ludHMoKTsKICAgICAvLyBGSVhNRShXSzQ0
NTEzKTogYnJlYWtwb2ludHMgYWN0aXZhdGVkIGZsYWcgc2hvdWxkIGJlIHN5bmNocm9uaXplZCBi
ZXR3ZWVuIGFsbCBmcm9udC1lbmRzCiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNl
dEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRydWUpOwotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5hZGRMaXN0ZW5lcihhZ2VudC5nZXQoKSwgaW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVj
dGVkUGFnZSgpKTsKKyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRkTGlzdGVuZXIo
YWdlbnQuZ2V0KCksIGluc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIHJldHVy
biBhZ2VudC5yZWxlYXNlKCk7CiB9CiAKLUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwg
SW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVy
KGluc3BlY3RvckNvbnRyb2xsZXIpCitJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkK
ICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDAp
CiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKQEAgLTYwLDcgKzYwLDcg
QEAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb24KIAogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQoKQogewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQo
KS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBh
Z2UoKSk7CisgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUxpc3RlbmVyKHRo
aXMsIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9wYXVzZWRTY3Jp
cHRTdGF0ZSA9IDA7CiB9CiAKQEAgLTE3NSwxNCArMTc1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShsb25nIHBhdXNlU3RhdGUsIGxv
bmcqIG5lCiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFt
ZShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRG
b3JPYmplY3RJZChjYWxsRnJhbWVJZC5nZXQoKSk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0
ZWRTY3JpcHRGb3JPYmplY3RJZChjYWxsRnJhbWVJZC5nZXQoKSk7CiAgICAgaWYgKCFpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25D
YWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCByZXN1bHQpOwog
fQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldENvbXBsZXRpb25zT25DYWxsRnJh
bWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGJvb2wgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmpl
Y3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkLmdldCgpKTsKKyAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9z
dCgpLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkLmdldCgpKTsKICAgICBp
ZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQu
Z2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgaW5jbHVk
ZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCByZXN1bHQpOwogfQpAQCAtMTk4LDcgKzE5OCw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJl
bnRDYWxsRnJhbWVzKCkKIHsKICAgICBpZiAoIW1fcGF1c2VkU2NyaXB0U3RhdGUpCiAgICAgICAg
IHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+
aW5qZWN0ZWRTY3JpcHRGb3IobV9wYXVzZWRTY3JpcHRTdGF0ZSk7CisgICAgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3Qo
KS0+aW5qZWN0ZWRTY3JpcHRGb3IobV9wYXVzZWRTY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGluamVj
dGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpudWxsKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCA0Y2I5ZjljLi5j
MTZiMzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNz
IEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKQEAgLTU2LDcgKzU2LDcgQEAgZW51bSBE
ZWJ1Z2dlckV2ZW50VHlwZSB7CiBjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGlj
IFNjcmlwdERlYnVnTGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9y
Q29udHJvbGxlciosIEluc3BlY3RvckZyb250ZW5kKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9y
RnJvbnRlbmQqKTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCk7CiAKICAg
ICBzdGF0aWMgYm9vbCBpc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpOwpAQCAtODQsNyArODQsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckZvclBhZ2VOYXZpZ2F0aW9uKCk7CiAKIHByaXZhdGU6
Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiwgSW5zcGVj
dG9yRnJvbnRlbmQqKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50
KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKIAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcmVzdG9yZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCk7CiAKLSAg
ICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVj
dG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJv
bnRlbmQ7CiAgICAgU2NyaXB0U3RhdGUqIG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gbV9zY3JpcHRJRFRvQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAKaW5kZXggMmEw
ZGYzYy4uNDY3Yzk3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJG
aWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZVRyZWUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUg
IkxvY2FsRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02OSw3
ICs2OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3Ry
aW5nJiwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0pCiAgICAgewotICAg
ICAgICAvLyBBZ2VudCB3aWxsIGJlIGFsaXZlIGV2ZW4gaWYgSW5zcGVjdG9yQ29udHJvbGxlciBp
cyBkZXN0cm95ZWQgdW50aWwgY2FsbGJhY2sgaXMgcnVuLgorICAgICAgICAvLyBBZ2VudCB3aWxs
IGJlIGFsaXZlIGV2ZW4gaWYgSW5zcGVjdG9yQWdlbnQgaXMgZGVzdHJveWVkIHVudGlsIGNhbGxi
YWNrIGlzIHJ1bi4KICAgICAgICAgbV9hZ2VudC0+ZGlkR2V0RmlsZVN5c3RlbVBhdGgoZmlsZVN5
c3RlbS0+cm9vdCgpLCBtX3R5cGUsIG1fb3JpZ2luKTsKICAgICB9CiAKQEAgLTEwNSw4ICsxMDUs
OCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX29yaWdpbjsKIH07CiAKLUluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudDo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIq
IGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKLSAgICA6
IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yRmls
ZVN5c3RlbUFnZW50OjpJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCisgICAgOiBtX2luc3Bl
Y3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKIHsK
IH0KQEAgLTExNSw3ICsxMTUsNyBAQCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6On5JbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQoKSB7IH0KIAogdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6
OnN0b3AoKQogewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlciA9IDA7CisgICAgbV9pbnNwZWN0
b3JBZ2VudCA9IDA7CiB9CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKQEAgLTEzOSw3ICsxMzks
NyBAQCB2b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Z2V0RmlsZVN5c3RlbVBhdGhBc3lu
Yyh1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3QgUwogICAgIH0KIAogICAgIEFzeW5jRmlsZVN5c3Rl
bTo6VHlwZSBhc3luY0ZpbGVTeXN0ZW1UeXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVt
OjpUeXBlPih0eXBlKTsKLSAgICBGcmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0b3JDb250cm9s
bGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpOworICAgIEZyYW1lKiBtYWluRnJhbWUg
PSBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpID09IG9yaWdpbikgewpAQCAtMTUxLDggKzE1MSw4IEBAIHZvaWQg
SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpnZXRGaWxlU3lzdGVtUGF0aEFzeW5jKHVuc2lnbmVk
IGludCB0eXBlLCBjb25zdCBTCiAKIHZvaWQgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpkaWRH
ZXRGaWxlU3lzdGVtUGF0aChjb25zdCBTdHJpbmcmIHJvb3QsIEFzeW5jRmlsZVN5c3RlbTo6VHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9yaWdpbikKIHsKLSAgICAvLyBXaGVuIGNvbnRyb2xsZXIg
aXMgYmVpbmcgZGVzdHJveWVkLCB0aGlzIGlzIHNldCB0byAwLiBBZ2VudCBjYW4gbGl2ZSBldmVu
IGFmdGVyIG1faW5zcGVjdG9yQ29udHJvbGxlciBpcyBkZXN0cm95ZWQuCi0gICAgaWYgKCFtX2lu
c3BlY3RvckNvbnRyb2xsZXIpCisgICAgLy8gV2hlbiBjb250cm9sbGVyIGlzIGJlaW5nIGRlc3Ry
b3llZCwgdGhpcyBpcyBzZXQgdG8gMC4gQWdlbnQgY2FuIGxpdmUgZXZlbiBhZnRlciBtX2luc3Bl
Y3RvckFnZW50IGlzIGRlc3Ryb3llZC4KKyAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fZnJvbnRlbmQtPmRpZEdldEZpbGVTeXN0ZW1QYXRoKHJvb3Qs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odHlwZSksIG9yaWdpbik7CkBAIC0xNjAsOCArMTYw
LDggQEAgdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1QYXRo
KGNvbnN0IFN0cmluZyYgcm9vdCwgQXN5bmNGaWwKIAogdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1FcnJvcihBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwg
Y29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7Ci0gICAgLy8gV2hlbiBjb250cm9sbGVyIGlzIGJlaW5n
IGRlc3Ryb3llZCwgdGhpcyBpcyBzZXQgdG8gMC4gQWdlbnQgY2FuIGxpdmUgZXZlbiBhZnRlciBt
X2luc3BlY3RvckNvbnRyb2xsZXIgaXMgZGVzdHJveWVkLgotICAgIGlmICghbV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgIC8vIFdoZW4gY29udHJvbGxlciBpcyBiZWluZyBkZXN0cm95ZWQsIHRo
aXMgaXMgc2V0IHRvIDAuIEFnZW50IGNhbiBsaXZlIGV2ZW4gYWZ0ZXIgbV9pbnNwZWN0b3JBZ2Vu
dCBpcyBkZXN0cm95ZWQuCisgICAgaWYgKCFtX2luc3BlY3RvckFnZW50KQogICAgICAgICByZXR1
cm47CiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0RmlsZVN5c3RlbUVycm9yKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4odHlwZSksIG9yaWdpbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmgKaW5kZXggYTg1YWQwZi4uYjk5NWQ3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0
ZW1BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQuaApAQCAtNDAsMTUgKzQwLDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERvY3VtZW50OwotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3Rv
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBMb2NhbEZpbGVTeXN0ZW07
CiAKIGNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCA6IHB1YmxpYyBSZWZDb3VudGVkPElu
c3BlY3RvckZpbGVTeXN0ZW1BZ2VudD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JB
Z2VudCogaW5zcGVjdG9yQWdlbnQsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KGlu
c3BlY3RvckNvbnRyb2xsZXIsIGZyb250ZW5kKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KGluc3BlY3RvckFnZW50LCBmcm9udGVuZCkpOwog
ICAgIH0KIAogICAgIH5JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoKTsKQEAgLTY0LDEwICs2NCwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRHZXRGaWxlU3lzdGVtRGlzYWJsZWQoKTsKIAogcHJp
dmF0ZToKLSAgICBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlcios
IEluc3BlY3RvckZyb250ZW5kKik7CisgICAgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KEluc3Bl
Y3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKICAgICB2b2lkIGdldEZpbGVTeXN0ZW1S
b290KEFzeW5jRmlsZVN5c3RlbTo6VHlwZSk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdl
bnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDM0
MmFmMGYuLjE3OTYyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0yMDAsNyArMjAxLDcgQEAgdm9pZCBJbnNwZWN0b3JG
cm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kSG9zdDo6c2V0RXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc2Ny
aXB0KQogewotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvciA9IG1fZnJvbnRlbmRQ
YWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ciA9IG1fZnJvbnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaW5zcGVjdG9y
LT5zZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoc2NyaXB0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDhjNGYy
OGYuLmU3MTk4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTMzLDggKzMzLDggQEAKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbnNvbGUu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnNv
bGVBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKQEAgLTU2LDE0ICs1NiwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lID0gIm9yZy53ZWJraXQucHJvZmlsZXMudXNlci1pbgog
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENQVVByb2ZpbGVUeXBlID0gIkNQVSI7CiBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgSGVhcFByb2ZpbGVUeXBlID0gIkhFQVAiOwogCi1QYXNzT3duUHRy
PEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQorUGFzc093blB0cjxJbnNw
ZWN0b3JQcm9maWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUoSW5zcGVj
dG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQogewotICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxl
ckFnZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3Bl
Y3RvckNvbnRyb2xsZXIpKTsKKyAgICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gYWdl
bnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudChpbnNwZWN0b3JBZ2VudCkp
OwogICAgIHJldHVybiBhZ2VudC5yZWxlYXNlKCk7CiB9CiAKLUluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9s
bGVyKQorSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3Bl
Y3RvckFnZW50KQogICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9lbmFibGVkKFNjcmlwdFBy
b2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlzRW5hYmxlZCgpKQogICAgICwgbV9yZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZShmYWxzZSkKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBJbnNwZWN0b3JQ
cm9maWxlckFnZW50OjphZGRQcm9maWxlRmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQ
dHI8U2NyaXAKICAgICBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7
CiAgICAgU3RyaW5nIHRpdGxlID0gcHJvZmlsZS0+dGl0bGUoKTsKICAgICBTdHJpbmcgbWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyIsIENQVVByb2ZpbGVU
eXBlLCAnLycsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLCAnIycsIFN0cmlu
Zzo6bnVtYmVyKHByb2ZpbGUtPnVpZCgpKSwgIlwiIGZpbmlzaGVkLiIpOwotICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+Y29uc29sZUFnZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5l
TnVtYmVyLCBzb3VyY2VVUkwpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPmNvbnNvbGVBZ2VudCgp
LT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExv
Z01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNv
bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCkBAIC0xMDEsNyArMTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXQK
ICAgICBpZiAoIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKICAgICBTdHJpbmcgbWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoIlByb2ZpbGUgXCJ3ZWJraXQtcHJvZmlsZTovLyIsIENQVVByb2ZpbGVU
eXBlLCAnLycsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModGl0bGUpLCAiIzBcIiBzdGFy
dGVkLiIpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y29uc29sZUFnZW50KCktPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAgIG1faW5zcGVjdG9y
QWdlbnQtPmNvbnNvbGVBZ2VudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJj
ZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJv
ZmlsZSkKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0
YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpCiAgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVk
UHJvZmlsZSA9IHRydWU7CiAgICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0
ZWRQcm9maWxlTmFtZSh0cnVlKTsKICNpZiBVU0UoSlNDKQotICAgIEpTQzo6RXhlY1N0YXRlKiBz
Y3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0
ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7Cisg
ICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3Rv
ckFnZW50LT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5n
bG9iYWxFeGVjKCk7CiAjZWxzZQogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7CiAj
ZW5kaWYKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0
b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKGJvb2wgaWdub3JlUHJvZmlsZSkKICAgICBtX3JlY29y
ZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlID0gZmFsc2U7CiAgICAgU3RyaW5nIHRpdGxlID0gZ2V0
Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSgpOwogI2lmIFVTRShKU0MpCi0gICAgSlND
OjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmds
b2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2lu
ZG93KG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVn
Z2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKICNlbHNlCiAgICAgLy8gVXNlIG51bGwgc2NyaXB0
IHN0YXRlIHRvIGF2b2lkIGZpbHRlcmluZyBieSBjb250ZXh0IHNlY3VyaXR5IHRva2VuLgogICAg
IC8vIEFsbCBmdW5jdGlvbnMgZnJvbSBhbGwgaWZyYW1lcyBzaG91bGQgYmUgdmlzaWJsZSBmcm9t
IEluc3BlY3RvciBVSS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudC5oCmluZGV4IDQzNmFlNTEuLjA5ZGU3MTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNDEsNyArNDEs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNz
IEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvckZyb250ZW5kOwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgU2NyaXB0SGVhcFNu
YXBzaG90OwpAQCAtNTAsNyArNTAsNyBAQCBjbGFzcyBTY3JpcHRQcm9maWxlOwogY2xhc3MgSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JD
b250cm9sbGVyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dD4gY3JlYXRlKEluc3BlY3RvckFnZW50Kik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudCgpOwogCiAgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmls
ZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOwpAQCAtNzcsMTEgKzc3LDExIEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVu
c2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gPiBI
ZWFwU25hcHNob3RzTWFwOwogCi0gICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JD
b250cm9sbGVyKik7CisgICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JBZ2VudCop
OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNv
bnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBjcmVhdGVTbmFwc2hvdEhlYWRlcihjb25zdCBTY3JpcHRIZWFwU25hcHNob3QmIHNuYXBz
aG90KTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsK
KyAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JGcm9u
dGVuZCogbV9mcm9udGVuZDsKICAgICBib29sIG1fZW5hYmxlZDsKICAgICBib29sIG1fcmVjb3Jk
aW5nVXNlckluaXRpYXRlZFByb2ZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGFlYzViNDUuLjFhMDM4
MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDEtMjIgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGZpcnN0IHN0ZXAgb2Ygc3Bs
aXR0aW5nIEluc3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIgd2FzIGFkZGVkLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk1NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5z
cGVjdG9yU2VydmVyUXQuY3BwOgorCiAyMDExLTAxLTIxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcApp
bmRleCA3MDAyZGNlLi5iYWQyNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JDbGllbnRRdC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJNRDUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79841</attachid>
            <date>2011-01-22 04:23:52 -0800</date>
            <delta_ts>2011-01-23 00:32:20 -0800</delta_ts>
            <desc>[patch] initial version. Rebased. </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>198444</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTVkODc5MC4uMDVkYTViYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTMsNiArMTE1Myw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1ZWY0
NTM5Li4wMmI5NmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI5IEBACisyMDExLTAxLTIyICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBmaXJzdCBzdGVw
IG9mIHNwbGl0dGluZyBJbnNwZWN0b3JDb250cm9sbGVyLgorCisgICAgICAgIFNwbGl0dGluZyBJ
bnNwZWN0b3JDb250cm9sbGVyIGlzIGEgYml0IHRyaWNreSBwcm9jZXNzLgorCisgICAgICAgIEFz
IGEgZmlyc3Qgc3RlcCBJJ2xsIGRvIHRoZSBuZXh0IHRoaW5nczoKKyAgICAgICAgMSkgcmVuYW1l
IGV4aXN0aW5nIEluc3BlY3RvckNvbnRyb2xsZXIgdG8gSW5zcGVjdG9yQWdlbnQ7CisgICAgICAg
IDIpIHMvbnNwZWN0b3JDb250cm9sbGVyL25zcGVjdG9yQWdlbnQvZyBldmVyeXdoZXJlIGluIFdl
YkNvcmUvaW5zcGVjdG9yIGJ1dCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb247CisgICAgICAgIDMp
IGNyZWF0ZSBhIGZha2UgSW5zcGVjdG9yQ29udHJvbGxlciBhcyBhIGNoaWxkIG9mIEluc3BlY3Rv
ckFnZW50IGZvciB0aGUgcmVzdCBvZiBXZWJDb3JlIGFuZCBXZWJLaXQ7CisKKyAgICAgICAgVGhl
IHNlY29uZCBzdGVwIGlzIGEgbWlncmF0aW9uIGEgc21hbGwgc2V0IG9mIGZ1bmN0aW9ucyBkZXNj
cmliZWQgaW4gYnVnIDUyNTEwIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVjdG9yQ29udHJv
bGxlci4KKworICAgICAgICBBcyBmYXIgYXMgdGhlIHNlY29uZCBzdGVwIHdpbGwgaGF2ZSBzaWdu
aWZpY2FudCBjaGFuZ2VzIGluIHRoZSBmdW5jdGlvbnMnIGltcGxlbWVudGF0aW9uIEknbGwgZG8g
aXQgYXMgYSBzZXBhcmF0ZSBwYXRjaC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTI5NTUKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6Om5v
ZGVGb3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0
RE9NU3RvcmFnZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlRm9ySWRDYWxsYmFjayk6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG06CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OkluamVjdGVkU2NyaXB0SG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29uc29sZU1l
c3NhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6ZGF0YWJhc2VG
b3JJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERhdGFi
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RE9NU3Rv
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2Ny
aXB0Rm9yTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6
aW5zcGVjdG9yRE9NQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0
Ojpmcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZENy
ZWF0ZVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRpZERl
c3Ryb3lXb3JrZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpkaXNjb25uZWN0Q29udHJvbGxlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6Okluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50Ojp+SW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OmVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2ll
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6aGlnaGxpZ2h0RE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6aGlnaGxpZ2h0RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omhp
ZGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1vdXNlRGlk
TW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoYW5k
bGVNb3VzZVByZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRJbnNw
ZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNob3dQYW5lbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVzb3VyY2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9maWxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6dW5iaW5kQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDb21taXRMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRlbnRFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6bWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmlzTWFpblJlc291cmNlTG9hZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuc3VyZVNldHRpbmdzTG9hZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0b3BUaW1lbGluZVByb2ZpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFz
azo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zy
b250ZW5kVGFzazo6UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6cGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvc3RXb3JrZXJOb3Rp
ZmljYXRpb25Ub0Zyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpk
aWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZERl
c3Ryb3lXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZE9wZW5E
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YnVpbGRBcnJheUZvckNvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ29va2ll
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRSZWNlaXZlV2ViU29j
a2V0SGFuZHNoYWtlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmRpZENsb3NlV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpp
c1JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckFnZW50OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpwcm9maWxlckVuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjpkaXNhYmxlUHJvZmlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRBbGxC
cm93c2VyQnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6cXVh
ZFRvUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpk
cmF3SGlnaGxpZ2h0Rm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdIaWdobGlnaHRGb3JM
aW5lQm94ZXNPclNWR1JlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRGcm9tRnJh
bWVUb01haW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkcmF3Tm9kZUhpZ2hsaWdodCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZHJhd0VsZW1lbnRUaXRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6b3BlbkluSW5zcGVjdGVkV2luZG93KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZW1vdmVBbGxTY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0
SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
OjppbnNwZWN0ZWRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlbG9h
ZFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnNldEV4dHJhSGVhZGVy
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50Lmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvckNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5qZWN0ZWRTY3JpcHRIb3N0KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpoaWRlRE9NTm9kZUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlkZUZyYW1lSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50Ojpmcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6aW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6aW5zcGVjdG9yQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmNvbnNvbGVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Y3Nz
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRvbUFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbmplY3RlZFNjcmlwdEFnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpydW50aW1lQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnRpbWVsaW5lQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmRhdGFiYXNlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OmRvbVN0b3JhZ2VBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6ZmlsZVN5c3RlbUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50Ojpicm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6ZGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
cHJvZmlsZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YXBwbGlj
YXRpb25DYWNoZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpoYXNJ
bnNwZWN0b3JGcm9udGVuZENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6aGFzRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXJ0
UHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wUHJvZmls
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkZWJ1Z2dlckVuYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXR0aW5ncyk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Omdl
dEFwcGxpY2F0aW9uQ2FjaGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50OjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVzdG9y
ZVN0aWNreUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxs
UmVtb3ZlRE9NTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6d2lsbE1vZGlmeURPTUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVu
dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50Ojp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29uc29sZUFnZW50Ojp+SW5zcGVjdG9yQ29uc29sZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzb3VyY2VSZXRyaWV2ZWRC
eVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNv
bGVBZ2VudDo6ZGlkRmFpbExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
c29sZUFnZW50OjpzZXRNb25pdG9yaW5nWEhSRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25zb2xlTWVzc2FnZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRh
dGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
On5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjdXJyZW50Q2FsbEZyYW1lcyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudENhbGxiYWNrczo6ZGlkT3BlbkZpbGVTeXN0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpJbnNwZWN0b3JGaWxl
U3lzdGVtQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Z2V0
RmlsZVN5c3RlbVBhdGhBc3luYyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGaWxlU3lz
dGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1QYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudDo6ZGlkR2V0RmlsZVN5c3RlbUVycm9yKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZEhvc3Q6OnNldEV4dGVuc2lvbkFQSSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6
Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudDo6YWRkUHJvZmlsZUZpbmlzaGVkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01lc3Nh
Z2VUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6
c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oOgorCiAyMDExLTAxLTIxICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzMxMmFmMS4uN2FhYzBjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5NTEsNiArMTk1MSw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggXAogCVNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAorCVNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4K
aW5kZXggMjUwYjYyOS4uZWFiY2FhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEzNTYsMjkg
KzEzNTYsMjUgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOHNldEVycm9y
RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUikKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ0c2hvd0V2CitfX1pON1dl
YkNvcmUxNEluc3BlY3RvckFnZW50NWNsb3NlRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdl
bnQ5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2Vu
dDEyQ29uc29sZVBhbmVsRQorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEzUHJvZmlsZXNQ
YW5lbEUKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNGVuYWJsZVByb2ZpbGVyRWJiCitf
X1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTVkaXNhYmxlRGVidWdnZXJFYgorX19aTjdXZWJD
b3JlMTRJbnNwZWN0b3JBZ2VudDE1ZGlzYWJsZVByb2ZpbGVyRWIKK19fWk43V2ViQ29yZTE0SW5z
cGVjdG9yQWdlbnQxOGRpc2Nvbm5lY3RGcm9udGVuZEV2CitfX1pON1dlYkNvcmUxNEluc3BlY3Rv
ckFnZW50MjBzdG9wVGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFn
ZW50MjFzaG93QW5kRW5hYmxlRGVidWdnZXJFdgorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2Vu
dDIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQy
M2luc3BlY3RvclN0YXJ0c0F0dGFjaGVkRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQy
NWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3Jl
MTRJbnNwZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NP
d25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19aTjdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFYgorX19aTjdXZWJDb3JlMTRJ
bnNwZWN0b3JBZ2VudDI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdXZWJDb3Jl
MTRJbnNwZWN0b3JBZ2VudDI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKIF9fWk43V2Vi
Q29yZTE1SW5zcGVjdG9yQ2xpZW50MzFkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQYWdlRVBO
U180UGFnZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxl
cjEyQ29uc29sZVBhbmVsRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMTJTY3Jp
cHRzUGFuZWxFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxM1Byb2ZpbGVzUGFu
ZWxFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXNob3dBbmRFbmFibGVEZWJ1
Z2dlckV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZVByb2ZpbGVy
RWJiCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVEZWJ1Z2dlckVi
Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxlckViCi1f
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVuZEV2Ci1f
X1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2ZpbGVyRXYK
LV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVByb2ZpbGVy
RXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIzaW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWRFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25QdHJJTlNf
MjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250
cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZEViCi1fX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pON1dlYkNv
cmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKLV9f
Wk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlckluaXRpYXRl
ZFByb2ZpbGVFdgotX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJvZmlsZXJF
bmFibGVkRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYKLV9fWk43
V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjVjbG9zZUV2Ci1fX1pON1dlYkNvcmUxOUluc3Bl
Y3RvckNvbnRyb2xsZXI3aW5zcGVjdEVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXI5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjhJbnNw
ZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKIF9fWk43V2ViQ29yZTI4
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgogX19aTjdXZWJD
b3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTVjYW5BdHRhY2hXaW5kb3dFdgpAQCAt
MTM5MCw4ICsxMzg2LDkgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodEVqCiBfX1pON1dlYkNvcmUyOEluc3BlY3Rv
ckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodEV2CiBfX1pO
N1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxDMkVQTlNfMTlJbnNwZWN0b3JD
b250cm9sbGVyRVBOU180UGFnZUUKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnRMb2NhbEQyRXYKLV9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxN2RyYXdOb2Rl
SGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKLV9fWk5LN1dlYkNvcmUxOUluc3BlY3Rv
ckNvbnRyb2xsZXI3ZW5hYmxlZEV2CitfX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1cHJv
ZmlsZXJFbmFibGVkRXYKK19fWk5LN1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTdkcmF3Tm9kZUhp
Z2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCitfX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JB
Z2VudDMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZUV2CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwYTQxOGU2Li4zMTk4YmRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0yMDA2LDYgKzIwMDYsOCBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwJywKKyAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IGRlNGVjNzcuLjBiZGM1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDQyLDYgKzEwNDIs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5jcHAgXApAQCAtMTk0MCw2ICsxOTQxLDcgQEAgSEVBREVSUyArPSBc
CiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAogICAgIGluc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmMzU1MGM3
Li41NjkwMDA4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNjUwNzQsNiArNjUwNzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50LmNwcCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvckFnZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3Bw
IgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0Y2Y2NDM5Li5mMzhmMWE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjY1LDYg
KzEyNjUsOCBAQAogCQk0RTE5NTkyRTBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeUV4cC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5Mjgw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLzsgfTsKIAkJNEYxNTM0REUxMUI1
MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNTM0REQxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRp
bmdCZWhhdmlvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JUeXBlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNTM0REYx
MUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNEYyRDIwNTQxMkVBRTdCMzAwNUMy
ODc0IC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0RjJE
MjA1NTEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTMxMkVBRTdCMzAwNUMyODc0
IC8qIEluc3BlY3RvckFnZW50LmNwcCAqLzsgfTsKIAkJNEYzMjg5QjUxMUE0MkFBQjAwNUFCRTdF
IC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVz
LmNwcCAqLzsgfTsKIAkJNEYzMjg5QjYxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVl
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYzMjg5
QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRGNEY1RkZCMTFDQkQyRTEwMEExODZC
RiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JEMkQyMDBBMTg2QkYgLyogSW5zcGVjdG9yRnJv
bnRlbmQuY3BwICovOyB9OwpAQCAtNzY2Nyw2ICs3NjY5LDggQEAKIAkJNEUxOTU5MjgwQTM5REFD
QzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEYx
NTM0REQxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCZWhhdmlvclR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGMkQyMDUyMTJFQUU3QjMwMDVD
Mjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0RjJEMjA1
MzEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9yVmFsdWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclZhbHVl
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMzI4OUI0MTFBNDJBQUIwMDVB
QkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGNEY1
RkZBMTFDQkQyRDIwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjk2OSw2ICsxMjk3Myw4IEBACiAJCQkJN0EwRTc2Rjcx
MEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oICovLAogCQkJCTdBMEU3NkY4
MTBCRjA4RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaWRsICovLAogCQkJCTdBNTYz
Rjk1MTJERjVDOTEwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAqLywKKwkJCQk0
RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLywKKwkJCQk0RjJE
MjA1MzEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwICovLAogCQkJCUI4ODVF
OEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3Bw
ICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCAqLywKIAkJCQlGM0Q0QzQ3NjEyRTA3NjYzMDAzREExNTAgLyogSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwICovLApAQCAtMjI0MTUsNiArMjI0MjEsNyBAQAog
CQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzhBRTM0RjEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFy
ZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAvKiBJbnNw
ZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTExMCw2ICsyNTExNyw3IEBACiAJCQkJ
RTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzhBRTM0RTEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFy
ZWEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYyRDIwNTUxMkVBRTdCMzAwNUMyODc0IC8qIElu
c3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCmluZGV4IDk3
MTA5OGQuLmRkMzZjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAKICNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgpAQCAtMTI4LDggKzEyOCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6
Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW1wbCgp
LT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWYgKCFpYykKKyAgICBpZiAoIWltcGwoKS0+
aW5zcGVjdG9yQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMTc3LDggKzE3Niw3IEBAIEpT
VmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+
aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGlmICghaWMpCisgICAgaWYgKCFpbXBsKCktPmlu
c3BlY3RvckFnZW50KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgU3Rv
cmFnZSogc3RvcmFnZSA9IHRvU3RvcmFnZShleGVjLT5hcmd1bWVudCgwKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRT
Y3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA2YmQ1YWJiLi5jZTE3MzJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRI
b3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC0x
NDcsOCArMTQ2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlRm9ySWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVy
KiBpYyA9IGhvc3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWljKQorICAgIGlm
ICghaG9zdC0+aW5zcGVjdG9yQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIAogICAgIHJldHVybiB0b1Y4KG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBlMjE1YTkxLi4yYWI1ZWNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5wbQpAQCAtNjAsNyArNjAsNyBAQCAkdHlwZVRyYW5zZm9ybXsiSW5qZWN0ZWRTY3JpcHQifSA9
IHsKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNj
cmlwdEFnZW50KCkiLAogfTsKICR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAgICAi
Zm9yd2FyZEhlYWRlciIgPT4gIkluc3BlY3RvckNvbnRyb2xsZXIuaCIsICMgRklYTUU6IFRlbXBv
cmFyeSBzb2x1dGlvbiB1bnRpbCBleHRyYWN0aW5nIHRoZSByZWFsIEluc3BlY3RvckFnZW50IGZy
b20gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAiZm9yd2FyZEhlYWRlciIgPT4gIkluc3BlY3Rv
ckFnZW50LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQWdlbnQiLAog
fTsKICR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7CkBAIC0yNjksNyArMjY5LDYgQEAgc3Vi
IEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgJGJhY2tlbmRDbGFzc05hbWUgPSAkY2xhc3NOYW1lIC4g
IkJhY2tlbmREaXNwYXRjaGVyIjsKICAgICAkYmFja2VuZEpTU3R1Yk5hbWUgPSAkY2xhc3NOYW1l
IC4gIkJhY2tlbmRTdHViIjsKICAgICBteSBAYmFja2VuZEhlYWQ7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgdHlwZWRlZiBJbnNwZWN0b3JDb250cm9sbGVyIEluc3BlY3RvckFnZW50OyIp
OyAjIEZJWE1FOiBUZW1wb3Jhcnkgc3Vic3RpdHV0aW9uIHVudGlsIGV4dHJhY3RpbmcgSW5zcGVj
dG9yQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgICR7YmFja2VuZENsYXNzTmFtZX0oSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
KSA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpIHsgfSIpOwogICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQpIGNvbnN0OyIpOwogICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggZDY3
YWRhZi4uZmJiNGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVj
dGVkU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9N
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCkBAIC02OSw4ICs2OSw4IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5qZWN0ZWRTY3JpcHRIb3N0OjpJ
bmplY3RlZFNjcmlwdEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
cikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5q
ZWN0ZWRTY3JpcHRIb3N0OjpJbmplY3RlZFNjcmlwdEhvc3QoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50KQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAs
IG1fbmV4dEluamVjdGVkU2NyaXB0SWQoMSkKICAgICAsIG1fbGFzdFdvcmtlcklkKDEgPDwgMzEp
IC8vIERpc3Rpbmd1aXNoIGlkcyBvZiBmYWtlIHdvcmtlcnMgZnJvbSByZWFsIG9uZXMsIHRvIG1p
bmltaXplIHRoZSBjaGFuY2VzIHRoZXkgb3ZlcmxhcC4KIHsKQEAgLTg5LDggKzg5LDggQEAgdm9p
ZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlT25TZWxmKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25Cb2R5LCBQYXNzUmVmUHRyPEkKIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNsZWFyQ29u
c29sZU1lc3NhZ2VzKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAg
ICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNvbnNvbGVBZ2VudCgpLT5jbGVhckNvbnNvbGVNZXNz
YWdlcygpOworICAgIGlmIChtX2luc3BlY3RvckFnZW50KQorICAgICAgICBtX2luc3BlY3RvckFn
ZW50LT5jb25zb2xlQWdlbnQoKS0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKIH0KIAogdm9pZCBJ
bmplY3RlZFNjcmlwdEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTEzMCwy
MyArMTMwLDIzIEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWROb2RlKHVuc2ln
bmVkIGxvbmcgbnVtKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKIERhdGFiYXNlKiBJbmplY3RlZFNj
cmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKQogewotICAgIGlmIChtX2lu
c3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUFnZW50
KCkpCi0gICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlQWdlbnQo
KS0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCAm
JiBtX2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCkpCisgICAgICAgIHJldHVybiBtX2lu
c3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCktPmRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3REYXRh
YmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
ciAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlQWdlbnQoKSkKLSAgICAgICAgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUFnZW50KCktPnNlbGVjdERhdGFiYXNlKGRhdGFi
YXNlKTsKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCAmJiBtX2luc3BlY3RvckFnZW50LT5kYXRh
YmFzZUFnZW50KCkpCisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdlbnQoKS0+
c2VsZWN0RGF0YWJhc2UoZGF0YWJhc2UpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdl
KiBzdG9yYWdlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21TdG9yYWdlQWdlbnQoKSkKLSAgICAgICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5kb21TdG9yYWdlQWdlbnQoKS0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsKKyAg
ICBpZiAobV9pbnNwZWN0b3JBZ2VudCAmJiBtX2luc3BlY3RvckFnZW50LT5kb21TdG9yYWdlQWdl
bnQoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCktPnNlbGVj
dERPTVN0b3JhZ2Uoc3RvcmFnZSk7CiB9CiAjZW5kaWYKIApAQCAtMTY2LDcgKzE2Niw3IEBAIElu
amVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJ
ZChJbnNwZWN0b3JPYmplY3QqIG9iCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9z
dDo6aW5qZWN0ZWRTY3JpcHRGb3JNYWluRnJhbWUoKQogewotICAgIHJldHVybiBpbmplY3RlZFNj
cmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3Bl
Y3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpKTsKKyAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRGb3Io
bWFpbldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZSgpLT5t
YWluRnJhbWUoKSkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6ZGlzY2FyZEluamVj
dGVkU2NyaXB0cygpCkBAIC0xOTIsMTYgKzE5MiwxNiBAQCB2b2lkIEluamVjdGVkU2NyaXB0SG9z
dDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0SWQsIGNvbnN0
CiAKIEluc3BlY3RvckRPTUFnZW50KiBJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RvckRPTUFn
ZW50KCkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICBpZiAoIW1faW5z
cGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRvbUFnZW50KCk7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmRvbUFn
ZW50KCk7CiB9CiAKIEluc3BlY3RvckZyb250ZW5kKiBJbmplY3RlZFNjcmlwdEhvc3Q6OmZyb250
ZW5kKCkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICBpZiAoIW1faW5z
cGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmZyb250ZW5kKCk7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQtPmZyb250
ZW5kKCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2NyaXB0U291
cmNlKCkKQEAgLTIyMywxNCArMjIzLDE0IEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjpuZXh0
V29ya2VySWQoKQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6ZGlkQ3JlYXRlV29ya2VyKGxv
bmcgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQogewotICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZGlkQ3JlYXRlV29ya2VyKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKKyAgICBpZiAobV9pbnNw
ZWN0b3JBZ2VudCkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlkQ3JlYXRlV29ya2VyKGlk
LCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmRp
ZERlc3Ryb3lXb3JrZXIobG9uZyBpZCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVy
KQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZERlc3Ryb3lXb3JrZXIoaWQpOwor
ICAgIGlmIChtX2luc3BlY3RvckFnZW50KQorICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kaWRE
ZXN0cm95V29ya2VyKGlkKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCmluZGV4IDEwOGYxMTgu
LmY1MWY4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRI
b3N0LmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgSW5qZWN0ZWRTY3JpcHRIb3N0X2gKIAog
I2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKQEAgLTUyLDkgKzUyLDkgQEAgY2xhc3MgU3RvcmFn
ZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEluamVjdGVk
U2NyaXB0SG9zdD4KIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmplY3RlZFNj
cmlwdEhvc3Q+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVy
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4gY3JlYXRlKEluc3Bl
Y3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5qZWN0ZWRTY3JpcHRIb3N0KGluc3BlY3RvckNvbnRyb2xsZXIpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbmplY3RlZFNjcmlwdEhvc3QoaW5zcGVjdG9yQWdlbnQpKTsK
ICAgICB9CiAKICAgICB+SW5qZWN0ZWRTY3JpcHRIb3N0KCk7CkBAIC02Miw4ICs2Miw4IEBAIHB1
YmxpYzoKICAgICAvLyBQYXJ0IG9mIHRoZSBwcm90b2NvbC4KICAgICB2b2lkIGV2YWx1YXRlT25T
ZWxmKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25Cb2R5LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcmd1bWVudHNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKIAotICAg
IEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7IH0KLSAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVyKCkgeyBt
X2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9CisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudDsgfQorICAgIHZvaWQgZGlzY29ubmVj
dENvbnRyb2xsZXIoKSB7IG1faW5zcGVjdG9yQWdlbnQgPSAwOyB9CiAKICAgICB2b2lkIGNsZWFy
Q29uc29sZU1lc3NhZ2VzKCk7CiAKQEAgLTk2LDE0ICs5NiwxNCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKik7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpOworICAgIEluamVjdGVkU2NyaXB0SG9zdChJbnNwZWN0b3JBZ2VudCopOwog
ICAgIEluc3BlY3RvckRPTUFnZW50KiBpbnNwZWN0b3JET01BZ2VudCgpOwogICAgIEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCgpOwogICAgIFN0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJjZSgp
OwogICAgIFNjcmlwdE9iamVjdCBjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNv
dXJjZSwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBsb25nIGlkKTsKICAgICB2b2lkIGRpc2Nh
cmRJbmplY3RlZFNjcmlwdChTY3JpcHRTdGF0ZSopOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3Rv
ckFnZW50OwogICAgIGxvbmcgbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZDsKICAgICBsb25nIG1fbGFz
dFdvcmtlcklkOwogICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBJbmplY3RlZFNjcmlwdD4gSWRU
b0luamVjdGVkU2NyaXB0TWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
Z2VudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwMTFiMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5j
cHAKQEAgLTAsMCArMSwxNDEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCBNYXR0IExpbGVrIDx3ZWJraXRAbWF0dGxpbGVrLmNvbT4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5j
bHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRE9N
V3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGbG9hdENvbnZlcnNp
b24uaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxGcmFt
ZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKKyNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JQcm9maWxlckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclJ1bnRpbWVBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clNldHRpbmdzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUg
IlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlNjcmlw
dEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgorI2luY2x1ZGUgIlNj
cmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUg
IlNjcmlwdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJTY3JpcHRQcm9maWxlci5oIgorI2luY2x1ZGUg
IlNjcmlwdFNvdXJjZUNvZGUuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUg
IlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRp
Y2F0b3IuaCIKKyNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgorI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKKyNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKKyNpbmNsdWRlICJT
dG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorI2luY2x1
ZGUgIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogY29uc3QgSW5zcGVj
dG9yQWdlbnQ6OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOworY29uc3QgY2hhciogY29uc3Qg
SW5zcGVjdG9yQWdlbnQ6OkNvbnNvbGVQYW5lbCA9ICJjb25zb2xlIjsKK2NvbnN0IGNoYXIqIGNv
bnN0IEluc3BlY3RvckFnZW50OjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7Citjb25zdCBjaGFy
KiBjb25zdCBJbnNwZWN0b3JBZ2VudDo6UHJvZmlsZXNQYW5lbCA9ICJwcm9maWxlcyI7CisKK0lu
c3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyLCBQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKKyAgICA6
IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAgICwgbV9pbnNw
ZWN0ZWRQYWdlKHBhZ2UpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX29wZW5pbmdG
cm9udGVuZChmYWxzZSkKKyAgICAsIG1fY3NzQWdlbnQobmV3IEluc3BlY3RvckNTU0FnZW50KCkp
CisgICAgLCBtX3N0YXRlKG5ldyBJbnNwZWN0b3JTdGF0ZShjbGllbnQpKQorICAgICwgbV9pbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihuZXcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIodGhp
cykpCisgICAgLCBtX2luamVjdGVkU2NyaXB0SG9zdChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0
ZSh0aGlzKSkKKyAgICAsIG1fY29uc29sZUFnZW50KG5ldyBJbnNwZWN0b3JDb25zb2xlQWdlbnQo
dGhpcykpCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgLCBtX2F0dGFjaERl
YnVnZ2VyV2hlblNob3duKGZhbHNlKQorICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKKyNlbmRpZgoreworICAgIEFTU0VSVF9BUkcocGFn
ZSwgcGFnZSk7CisgICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7Cit9CisKK0luc3BlY3Rv
ckFnZW50Ojp+SW5zcGVjdG9yQWdlbnQoKQoreworICAgIC8vIFRoZXNlIHNob3VsZCBoYXZlIGJl
ZW4gY2xlYXJlZCBpbiBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkuCisgICAgQVNTRVJUKCFtX2Ns
aWVudCk7CisgICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOworICAgIEFTU0VSVCghbV9oaWdo
bGlnaHRlZE5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlRGVz
dHJveWVkKCkKK3sKKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlz
Y29ubmVjdEZyb21CYWNrZW5kKCk7CisKKyAgICBoaWRlSGlnaGxpZ2h0KCk7CisKKyNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBtX2RlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKKyAg
ICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmNsZWFyKCk7CisjZW5kaWYKKworICAgIEFTU0VSVCht
X2luc3BlY3RlZFBhZ2UpOworICAgIG1faW5zcGVjdGVkUGFnZSA9IDA7CisKKyAgICByZWxlYXNl
RnJvbnRlbmRMaWZldGltZUFnZW50cygpOworICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNj
b25uZWN0Q29udHJvbGxlcigpOworCisgICAgbV9jbGllbnQtPmluc3BlY3RvckRlc3Ryb3llZCgp
OworICAgIG1fY2xpZW50ID0gMDsKK30KKworYm9vbCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRy
YXNFbmFibGVkKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkKCkKK3sKKyAgICByZXR1cm4gbV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JT
ZXR0aW5nczo6SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOworfQorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVkKQoreworICAgIG1f
c2V0dGluZ3MtPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6Okluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkLCBhdHRhY2hlZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3Rv
ckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KQoreworICAgIG1fc2V0dGluZ3MtPnNldExvbmco
SW5zcGVjdG9yU2V0dGluZ3M6Okluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBoZWlnaHQpOworfQor
Citsb25nIEluc3BlY3RvckFnZW50OjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc2V0dGluZ3MtPmdldExvbmcoSW5zcGVjdG9yU2V0dGluZ3M6Okluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0KTsKK30KKworYm9vbCBJbnNwZWN0b3JBZ2VudDo6c2VhcmNoaW5n
Rm9yTm9kZUluUGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGUtPmdldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnNlYXJjaGluZ0Zvck5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVj
dG9yU3RhdGVDb29raWUpCit7CisgICAgbV9zdGF0ZS0+cmVzdG9yZUZyb21JbnNwZWN0b3JDb29r
aWUoaW5zcGVjdG9yU3RhdGVDb29raWUpOworCisgICAgaWYgKCFtX2Zyb250ZW5kKSB7CisgICAg
ICAgIGNvbm5lY3RGcm9udGVuZCgpOworICAgICAgICBtX2Zyb250ZW5kLT5mcm9udGVuZFJldXNl
ZCgpOworICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVS
TCgpLnN0cmluZygpKTsKKyAgICAgICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQobV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIHB1c2hEYXRhQ29sbGVj
dGVkT2ZmbGluZSgpOworICAgIH0KKworICAgIG1fcmVzb3VyY2VBZ2VudCA9IEluc3BlY3RvclJl
c291cmNlQWdlbnQ6OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zy
b250ZW5kLmdldCgpKTsKKworICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0
YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkpCisgICAgICAgIHN0YXJ0VGltZWxpbmVQcm9m
aWxlcigpOworCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAgcmVzdG9yZURl
YnVnZ2VyKCk7CisgICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQp
OworICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlh
dGVkUHJvZmlsaW5nKSkKKyAgICAgICAgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChOb2RlKiBub2RlKQorewor
ICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaG93KCk7CisKKyAg
ICBpZiAobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFKQorICAgICAgICBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpOworICAgIG1fbm9kZVRvRm9jdXMgPSBub2RlOworCisgICAgaWYgKCFtX2Zyb250
ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBmb2N1c05vZGUoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JBZ2VudDo6Zm9jdXNOb2RlKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIEFTU0VSVChtX25vZGVUb0Zv
Y3VzKTsKKworICAgIGxvbmcgaWQgPSBtX2RvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KG1fbm9kZVRvRm9jdXMuZ2V0KCkpOworICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUZvY3VzZWROb2Rl
KGlkKTsKKyAgICBtX25vZGVUb0ZvY3VzID0gMDsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6
aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlRfQVJHKG5vZGUsIG5vZGUpOworICAgIG1faGlnaGxpZ2h0ZWROb2Rl
ID0gbm9kZTsKKyAgICBtX2NsaWVudC0+aGlnaGxpZ2h0KG5vZGUpOworfQorCit2b2lkIEluc3Bl
Y3RvckFnZW50OjpoaWdobGlnaHRET01Ob2RlKGxvbmcgbm9kZUlkKQoreworICAgIE5vZGUqIG5v
ZGUgPSAwOworICAgIGlmIChtX2RvbUFnZW50ICYmIChub2RlID0gbV9kb21BZ2VudC0+bm9kZUZv
cklkKG5vZGVJZCkpKQorICAgICAgICBoaWdobGlnaHQobm9kZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCkKK3sKKyAgICBG
cmFtZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKKyAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KG1haW5GcmFtZSkpIHsKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihmcmFtZSkgPT0gZnJhbWVJZCAmJiBmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsK
KyAgICAgICAgICAgIGhpZ2hsaWdodChmcmFtZS0+b3duZXJFbGVtZW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckFnZW50Ojpo
aWRlSGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gMDsKKyAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgp
OworfQorCit2b2lkIEluc3BlY3RvckFnZW50Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25z
dCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQoreworICAgIGlmICghZW5hYmxlZCgp
IHx8ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIE5v
ZGUqIG5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIGhpZ2hsaWdodChub2RlKTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JBZ2VudDo6aGFuZGxlTW91c2VQcmVzcygpCit7CisgICAgaWYgKCFlbmFi
bGVkKCkgfHwgIXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKG1faGlnaGxpZ2h0ZWROb2RlKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiBu
b2RlID0gbV9oaWdobGlnaHRlZE5vZGU7CisgICAgICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFs
c2UpOworICAgICAgICBpbnNwZWN0KG5vZGUuZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQo
UGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KQoreworICAgIEFTU0VS
VCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7CisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENs
aWVudCA9IGNsaWVudDsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dP
YmplY3RJbldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKK3sKKyAg
ICBpZiAod29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZlIGFzIEluc3BlY3RvckZy
b250ZW5kIG5vdGlmeSBpbnNwZXRvciBmcm9udGVuZAorICAgIC8vIGNsaWVudCB0aGF0IGl0J3Mg
Y2xlYXJlZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3Mu
CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0
ZWRQYWdlLT5tYWluRnJhbWUoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+
d2luZG93T2JqZWN0Q2xlYXJlZCgpOworCisgICAgaWYgKGVuYWJsZWQoKSkgeworICAgICAgICBp
ZiAobV9mcm9udGVuZCAmJiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQor
ICAgICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMo
KTsKKyAgICAgICAgaWYgKG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShm
cmFtZSk7CisgICAgICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1f
c2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgaXQgIT0g
bV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgICAg
IG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RTY3JpcHQoKml0LCBzY3JpcHRTdGF0ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX2luc3BlY3RvckV4dGVu
c2lvbkFQSS5pc0VtcHR5KCkpCisgICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RT
Y3JpcHQobV9pbnNwZWN0b3JFeHRlbnNpb25BUEksIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1l
KSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkKQoreworICAgIGlmIChzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgPT0gZW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6
OnNlYXJjaGluZ0Zvck5vZGUsIGVuYWJsZWQpOworICAgIGlmICghZW5hYmxlZCkKKyAgICAgICAg
aGlkZUhpZ2hsaWdodCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpzZXRTZWFyY2hpbmdG
b3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpCit7CisgICAgKm5ld1N0YXRlID0g
ZW5hYmxlZDsKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVuYWJsZWQpOworfQorCit2b2lkIElu
c3BlY3RvckFnZW50Ojpjb25uZWN0RnJvbnRlbmQoKQoreworICAgIG1fb3BlbmluZ0Zyb250ZW5k
ID0gZmFsc2U7CisgICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKKyAgICBtX2Zy
b250ZW5kID0gbmV3IEluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKKyAgICBtX2RvbUFnZW50
ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSwg
bV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9ydW50aW1lQWdlbnQgPSBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7CisgICAgbV9jc3NBZ2Vu
dC0+c2V0RE9NQWdlbnQobV9kb21BZ2VudC5nZXQoKSk7CisKKyNpZiBFTkFCTEUoREFUQUJBU0Up
CisgICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Y3JlYXRlKCZt
X2RhdGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKKyNlbmRpZgorCisjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQorICAgIG1fZG9tU3RvcmFnZUFnZW50ID0gSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJlc291cmNlcywgbV9mcm9udGVuZC5nZXQo
KSk7CisjZW5kaWYKKworICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCisgICAgICAgIG1fdGltZWxp
bmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0KCkpOworCisg
ICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworCisgICAg
Ly8gSW5pdGlhbGl6ZSBXZWIgSW5zcGVjdG9yIHRpdGxlLgorICAgIG1fZnJvbnRlbmQtPmluc3Bl
Y3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCkuc3RyaW5nKCkpOworCisjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCA9IG5l
dyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7
CisjZW5kaWYKKworI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICBtX2ZpbGVTeXN0ZW1BZ2Vu
dCA9IEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0
KCkpOworI2VuZGlmCisKKyAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJv
bnRlbmRzKCkpCisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tG
b3JVbmNhdWdodEV4Y2VwdGlvbnModHJ1ZSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojpmcm9udGVuZENyZWF0ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hvdygpCit7
CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX29wZW5p
bmdGcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZnJvbnRlbmQpCisgICAg
ICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOworICAgIGVsc2UgeworICAgICAgICBtX29w
ZW5pbmdGcm9udGVuZCA9IHRydWU7CisgICAgICAgIG1fY2xpZW50LT5vcGVuSW5zcGVjdG9yRnJv
bnRlbmQoaW5zcGVjdG9yQ29udHJvbGxlcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9y
QWdlbnQ6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKQoreworICAgIGlmICghZW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzaG93KCk7CisKKyAgICBpZiAoIW1fZnJvbnRl
bmQpIHsKKyAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gcGFuZWw7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6Y2xvc2UoKQoreworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZnJvbnRlbmQtPmRpc2Nvbm5lY3RGcm9tQmFja2VuZCgpOworICAgIGRp
c2Nvbm5lY3RGcm9udGVuZCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0
RnJvbnRlbmQoKQoreworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9mcm9udGVuZC5jbGVhcigpOworCisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpm
cm9udGVuZERlbGV0ZWQoKTsKKyAgICBpZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFz
RnJvbnRlbmRzKCkpCisgICAgICAgIFNjcmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3Rh
Y2tGb3JVbmNhdWdodEV4Y2VwdGlvbnMoZmFsc2UpOworCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUg
ZGVidWdnZXIgZW5hYmxlZCwKKyAgICAvLyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJs
ZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3aW5kb3cKKyAgICAvLyBvcGVuaW5nLgorICAgIGJvb2wg
ZGVidWdnZXJXYXNFbmFibGVkID0gZGVidWdnZXJFbmFibGVkKCk7CisgICAgZGlzYWJsZURlYnVn
Z2VyKCk7CisgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGRlYnVnZ2VyV2FzRW5hYmxl
ZDsKKyNlbmRpZgorICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZmFsc2UpOworICAgIHVuYmluZEFs
bFJlc291cmNlcygpOworICAgIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKKyAgICBoaWRlSGln
aGxpZ2h0KCk7CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBtX3Byb2Zp
bGVyQWdlbnQtPnNldEZyb250ZW5kKDApOworICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmcodHJ1ZSk7CisjZW5kaWYKKyAgICBtX2NvbnNvbGVBZ2VudC0+c2V0
RnJvbnRlbmQoMCk7CisKKyAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOworICAg
IG1fdGltZWxpbmVBZ2VudC5jbGVhcigpOworICAgIG1fZXh0cmFIZWFkZXJzLmNsZWFyKCk7Cit9
CisKK0luc3BlY3RvclJlc291cmNlQWdlbnQqIEluc3BlY3RvckFnZW50OjpyZXNvdXJjZUFnZW50
KCkKK3sKKyAgICBpZiAoIW1fcmVzb3VyY2VBZ2VudCAmJiBtX2Zyb250ZW5kKQorICAgICAgICBt
X3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFnZW50OjpjcmVhdGUobV9pbnNwZWN0
ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICByZXR1cm4gbV9y
ZXNvdXJjZUFnZW50LmdldCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpyZWxlYXNlRnJv
bnRlbmRMaWZldGltZUFnZW50cygpCit7CisgICAgbV9yZXNvdXJjZUFnZW50LmNsZWFyKCk7Cisg
ICAgbV9ydW50aW1lQWdlbnQuY2xlYXIoKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludm9r
ZWQgcHJpb3IgdG8gbV9kb21BZ2VudCBkZXN0cnVjdGlvbi4KKyAgICBtX2Nzc0FnZW50LT5zZXRE
T01BZ2VudCgwKTsKKworICAgIC8vIG1fZG9tQWdlbnQgaXMgUmVmUHRyLiBSZW1vdmUgRE9NIGxp
c3RlbmVycyBmaXJzdCB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUKKyAgICAvLyBubyByZWZlcmVu
Y2VzIHRvIHRoZSBET00gYWdlbnQgZnJvbSB0aGUgRE9NIHRyZWUuCisgICAgaWYgKG1fZG9tQWdl
bnQpCisgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CisgICAgbV9kb21BZ2VudC5jbGVhcigp
OworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIGlmIChtX2RhdGFiYXNlQWdlbnQpCisgICAg
ICAgIG1fZGF0YWJhc2VBZ2VudC0+Y2xlYXJGcm9udGVuZCgpOworICAgIG1fZGF0YWJhc2VBZ2Vu
dC5jbGVhcigpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgbV9kb21T
dG9yYWdlQWdlbnQuY2xlYXIoKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykKKyAgICBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jbGVhcigpOworI2VuZGlm
CisKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisgICAgaWYgKG1fZmlsZVN5c3RlbUFnZW50KQor
ICAgICAgICBtX2ZpbGVTeXN0ZW1BZ2VudC0+c3RvcCgpOworICAgICAgICBtX2ZpbGVTeXN0ZW1B
Z2VudC5jbGVhcigpOworI2VuZGlmCit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRl
U2NyaXB0T2JqZWN0cygpCit7CisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIGlmICghbV9m
cm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Nob3dBZnRlclZpc2libGUu
aXNFbXB0eSgpKSB7CisgICAgICAgIHNob3dQYW5lbChtX3Nob3dBZnRlclZpc2libGUpOworICAg
ICAgICBtX3Nob3dBZnRlclZpc2libGUgPSAiIjsKKyAgICB9CisKKyNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKKyAgICBpZiAobV9wcm9maWxlckFnZW50LT5lbmFibGVkKCkpCisgICAg
ICAgIG1fZnJvbnRlbmQtPnByb2ZpbGVyV2FzRW5hYmxlZCgpOworI2VuZGlmCisKKyAgICBwdXNo
RGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsKKworICAgIGlmIChtX25vZGVUb0ZvY3VzKQorICAgICAg
ICBmb2N1c05vZGUoKTsKKworICAgIC8vIERpc3BhdGNoIHBlbmRpbmcgZnJvbnRlbmQgY29tbWFu
ZHMKKyAgICBmb3IgKFZlY3RvcjxwYWlyPGxvbmcsIFN0cmluZz4gPjo6aXRlcmF0b3IgaXQgPSBt
X3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdFdmFs
dWF0ZVRlc3RDb21tYW5kcy5lbmQoKTsgKytpdCkKKyAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVh
dGVGb3JUZXN0SW5Gcm9udGVuZCgoKml0KS5maXJzdCwgKCppdCkuc2Vjb25kKTsKKyAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmVzdG9yZURlYnVnZ2Vy
KCk7CisgICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZU5vQWN0aW9uKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKK3sKKyAgICBt
X2RvbUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1
bWVudCgpKTsKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICBEYXRhYmFzZVJlc291cmNlc01h
cDo6aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKKyAg
ICBmb3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNv
dXJjZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vj
b25kLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQorICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQg
PSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7CisgICAgZm9yIChET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAh
PSBkb21TdG9yYWdlRW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRl
bmQuZ2V0KCkpOworI2VuZGlmCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVO
QUJMRShXT1JLRVJTKQorICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlcnNFbmQgPSBtX3dv
cmtlcnMuZW5kKCk7CisgICAgZm9yIChXb3JrZXJzTWFwOjppdGVyYXRvciBpdCA9IG1fd29ya2Vy
cy5iZWdpbigpOyBpdCAhPSB3b3JrZXJzRW5kOyArK2l0KSB7CisgICAgICAgIEluc3BlY3Rvcldv
cmtlclJlc291cmNlKiB3b3JrZXIgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAgICBtX2Zyb250
ZW5kLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVybCgpLCB3b3JrZXIt
PmlzU2hhcmVkV29ya2VyKCkpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpyZXN0b3JlRGVidWdnZXIoKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6aXNEZWJ1Z2dlckFsd2F5c0VuYWJsZWQoKSB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
IHx8IG1fc2V0dGluZ3MtPmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OkRlYnVnZ2VyQWx3
YXlzRW5hYmxlZCkpIHsKKyAgICAgICAgZW5hYmxlRGVidWdnZXIoZmFsc2UpOworICAgICAgICBt
X2F0dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7CisgICAgfQorI2VuZGlmCit9CisKK3Zv
aWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24g
YWN0aW9uKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKKyAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQu
Z2V0KCkpOworICAgIGlmICghU2NyaXB0UHJvZmlsZXI6OmlzUHJvZmlsZXJBbHdheXNFbmFibGVk
KCkgJiYgbV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6UHJvZmlsZXJB
bHdheXNFbmFibGVkKSkKKyAgICAgICAgZW5hYmxlUHJvZmlsZXIoKTsKKyAgICBpZiAoYWN0aW9u
ID09IFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQpCisgICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+
cmVzZXRGcm9udGVuZFByb2ZpbGVzKCk7CisjZW5kaWYKK30KKwordm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6dW5iaW5kQWxsUmVzb3VyY2VzKCkKK3sKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgRGF0
YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNv
dXJjZXMuZW5kKCk7CisgICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkK
KyAgICAgICAgaXQtPnNlY29uZC0+dW5iaW5kKCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisgICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVu
ZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKERPTVN0b3JhZ2VSZXNv
dXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0
ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOwor
I2VuZGlmCisgICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKKyAgICAgICAgbV90aW1lbGluZUFnZW50
LT5yZXNldCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+
ZGlkQ29tbWl0TG9hZChsb2FkZXIpOworICAgIAorICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OworCisgICAgaWYgKGxvYWRlci0+ZnJhbWUoKSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpKSB7CisgICAgICAgIGlmIChtX2Zyb250ZW5kKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+
aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKKworICAgICAgICBt
X2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOworICAgICAgICBt
X2NvbnNvbGVBZ2VudC0+cmVzZXQoKTsKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQorICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7CisgICAgICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKKyAgICAgICAgICAgIGlmIChtX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50KQorICAgICAgICAgICAgICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQt
Pmluc3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCkpOworICAgICAgICB9CisjZW5kaWYK
KworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQorICAgICAgICBt
X3Byb2ZpbGVyQWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKHRydWUpOworICAgICAg
ICBtX3Byb2ZpbGVyQWdlbnQtPnJlc2V0U3RhdGUoKTsKKyNlbmRpZgorCisgICAgICAgIC8vIHVu
YmluZEFsbFJlc291cmNlcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBkYXRhYmFzZSBhbmQgRE9N
IHN0b3JhZ2UKKyAgICAgICAgLy8gcmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgaXQgaGFz
IGEgY2hhbmNlIHRvIHVuYmluZCB0aGVtLgorICAgICAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsK
KworICAgICAgICBpZiAobV9mcm9udGVuZCkgeworICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVz
ZXQoKTsKKyAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CisgICAgICAgICAgICBtX2Nz
c0FnZW50LT5yZXNldCgpOworICAgICAgICB9CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgICAg
IG1fd29ya2Vycy5jbGVhcigpOworI2VuZGlmCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgICAg
ICBtX2RhdGFiYXNlUmVzb3VyY2VzLmNsZWFyKCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCisgICAgICAgIG1fZG9tU3RvcmFnZVJlc291cmNlcy5jbGVhcigpOworI2VuZGlmCisK
KyAgICAgICAgaWYgKG1fZnJvbnRlbmQpCisgICAgICAgICAgICBtX2RvbUFnZW50LT5zZXREb2N1
bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICB9Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIWVu
YWJsZWQoKSB8fCAhaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVyLCB1cmwpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdl
bnQtPmRpZE1hcmtET01Db250ZW50RXZlbnQoKTsKKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAg
ICAgbV9mcm9udGVuZC0+ZG9tQ29udGVudEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Om1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50
TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSB8
fCAhaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVyLCB1cmwpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICBtX3RpbWVsaW5lQWdlbnQtPmRpZE1h
cmtMb2FkRXZlbnQoKTsKKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgbV9mcm9udGVuZC0+
bG9hZEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6
OmlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwm
IHJlcXVlc3RVcmwpCit7CisgICAgcmV0dXJuIGxvYWRlci0+ZnJhbWUoKSA9PSBtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpICYmIHJlcXVlc3RVcmwgPT0gbG9hZGVyLT5yZXF1ZXN0VVJMKCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2Zyb250ZW5kKSB7CisgICAgICAgIC8vIE9ubHkgZW5hYmxlIGxvYWQgdGltaW5n
IGFuZCByYXcgaGVhZGVycyBpZiBmcm9udC1lbmQgaXMgYXR0YWNoZWQsIGFzIG90aGVyd2lzZSB3
ZSBtYXkgcHJvZHVjZSBvdmVyaGVhZC4KKyAgICAgICAgcmVxdWVzdC5zZXRSZXBvcnRMb2FkVGlt
aW5nKHRydWUpOworICAgICAgICByZXF1ZXN0LnNldFJlcG9ydFJhd0hlYWRlcnModHJ1ZSk7CisK
KyAgICAgICAgaWYgKG1fZXh0cmFIZWFkZXJzKSB7CisgICAgICAgICAgICBIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2V4dHJhSGVhZGVycy0+ZW5kKCk7CisgICAgICAgICAg
ICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9leHRyYUhlYWRlcnMt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEluc3BlY3RvckFnZW50OjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCit7CisgICAg
aWYgKG1fc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NldHRpbmdzID0gbmV3IElu
c3BlY3RvclNldHRpbmdzKG1fY2xpZW50KTsKKyAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3Bl
Y3RvclN0YXRlOjptb25pdG9yaW5nWEhSLCBtX3NldHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3Rv
clNldHRpbmdzOjpNb25pdG9yaW5nWEhSRW5hYmxlZCkpOworfQorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV90aW1lbGluZUFnZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3RpbWVsaW5lQWdlbnQgPSBuZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChtX2Zy
b250ZW5kLmdldCgpKTsKKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgbV9mcm9udGVuZC0+
dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQoKTsKKworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JBZ2VudDo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQoreworICAgIGlmICghZW5h
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdGltZWxpbmVBZ2VudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV90aW1lbGluZUFnZW50ID0gMDsKKyAgICBpZiAobV9mcm9u
dGVuZCkKKyAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKTsK
KworICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmls
ZXJFbmFibGVkLCBmYWxzZSk7Cit9CisKKyNpZiBFTkFCTEUoV09SS0VSUykKK2NsYXNzIFBvc3RX
b3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQb3N0V29ya2Vy
Tm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3Rvcldv
cmtlclJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckFnZW50OjpXb3JrZXJBY3Rpb24gYWN0aW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9u
dGVuZFRhc2sod29ya2VyLCBhY3Rpb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2soUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JBZ2VudDo6V29ya2VyQWN0aW9uIGFjdGlvbikKKyAg
ICAgICAgOiBtX3dvcmtlcih3b3JrZXIpCisgICAgICAgICwgbV9hY3Rpb24oYWN0aW9uKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChzY3JpcHRDb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVj
dG9yID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihzY3JpcHRDb250ZXh0KS0+cGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkpCisgICAgICAgICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29ya2Vy
Tm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93b3JrZXIsIG1fYWN0aW9uKTsKKyAgICAgICAgfQor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IG1f
d29ya2VyOworICAgIEluc3BlY3RvckFnZW50OjpXb3JrZXJBY3Rpb24gbV9hY3Rpb247Cit9Owor
Cit2b2lkIEluc3BlY3RvckFnZW50Ojpwb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChj
b25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYgd29ya2VyLCBJbnNwZWN0b3JBZ2VudDo6V29y
a2VyQWN0aW9uIGFjdGlvbikKK3sKKyAgICBpZiAoIW1fZnJvbnRlbmQpCisgICAgICAgIHJldHVy
bjsKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBzd2l0Y2ggKGFjdGlvbikg
eworICAgIGNhc2UgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckNyZWF0ZWQ6CisgICAgICAgIG1fZnJv
bnRlbmQtPmRpZENyZWF0ZVdvcmtlcih3b3JrZXIuaWQoKSwgd29ya2VyLnVybCgpLCB3b3JrZXIu
aXNTaGFyZWRXb3JrZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5zcGVjdG9yQWdl
bnQ6OldvcmtlckRlc3Ryb3llZDoKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkRGVzdHJveVdvcmtl
cih3b3JrZXIuaWQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCit2b2lk
IEluc3BlY3RvckFnZW50OjpkaWRDcmVhdGVXb3JrZXIoaW50cHRyX3QgaWQsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IHdvcmtl
clJlc291cmNlKEluc3BlY3RvcldvcmtlclJlc291cmNlOjpjcmVhdGUoaWQsIHVybCwgaXNTaGFy
ZWRXb3JrZXIpKTsKKyAgICBtX3dvcmtlcnMuc2V0KGlkLCB3b3JrZXJSZXNvdXJjZSk7CisgICAg
aWYgKG1faW5zcGVjdGVkUGFnZSAmJiBtX2Zyb250ZW5kKQorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5wb3N0VGFzayhQb3N0V29ya2VyTm90aWZpY2F0
aW9uVG9Gcm9udGVuZFRhc2s6OmNyZWF0ZSh3b3JrZXJSZXNvdXJjZSwgSW5zcGVjdG9yQWdlbnQ6
OldvcmtlckNyZWF0ZWQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkRGVzdHJveVdv
cmtlcihpbnRwdHJfdCBpZCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgV29ya2Vyc01hcDo6aXRlcmF0b3Igd29ya2VyUmVzb3VyY2UgPSBtX3dvcmtlcnMu
ZmluZChpZCk7CisgICAgaWYgKHdvcmtlclJlc291cmNlID09IG1fd29ya2Vycy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChtX2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKKyAg
ICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2so
UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3Vy
Y2UtPnNlY29uZCwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckRlc3Ryb3llZCkpOworICAgIG1fd29y
a2Vycy5yZW1vdmUod29ya2VyUmVzb3VyY2UpOworfQorI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJT
KQorCisjaWYgRU5BQkxFKERBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkT3BlbkRh
dGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCit7CisgICAgaWYg
KCFlbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNyZWF0
ZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKKworICAgIG1fZGF0YWJhc2VSZXNv
dXJjZXMuc2V0KHJlc291cmNlLT5pZCgpLCByZXNvdXJjZSk7CisKKyAgICAvLyBSZXNvdXJjZXMg
YXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAg
ICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6Z2V0Q29va2llcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVz
LCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZykKK3sKKyAgICAvLyBJZiB3ZSBjYW4gZ2V0IHJh
dyBjb29raWVzLgorICAgIExpc3RIYXNoU2V0PENvb2tpZT4gcmF3Q29va2llc0xpc3Q7CisKKyAg
ICAvLyBJZiB3ZSBjYW4ndCBnZXQgcmF3IGNvb2tpZXMgLSBmYWxsIGJhY2sgdG8gU3RyaW5nIHJl
cHJlc2VudGF0aW9uCisgICAgU3RyaW5nIHN0cmluZ0Nvb2tpZXNMaXN0OworCisgICAgLy8gUmV0
dXJuIHZhbHVlIHRvIGdldFJhd0Nvb2tpZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBldmVyeSBj
YWxsIGJlY2F1c2UKKyAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIHBsYXRmb3JtL25ldHdvcmsg
YmFja2VuZCBzcGVjaWZpYywgYW5kIHRoZSBjYWxsIHdpbGwKKyAgICAvLyBhbHdheXMgcmV0dXJu
IHRoZSBzYW1lIHRydWUvZmFsc2UgdmFsdWUuCisgICAgYm9vbCByYXdDb29raWVzSW1wbGVtZW50
ZWQgPSBmYWxzZTsKKworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1f
aW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkpKSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6RG9jdW1lbnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJl
c291cmNlTG9hZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOworICAgICAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxs
UmVzb3VyY2VzLmVuZCgpOworICAgICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1
bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tp
ZXNMaXN0OworICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2ll
cyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgZG9j
Q29va2llc0xpc3QpOworCisgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5n
IGZvciB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCisgICAgICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgc3RyaW5nQ29va2llc0xp
c3QgKz0gZG9jdW1lbnQtPmNvb2tpZShlYyk7CisgICAgICAgICAgICAgICAgLy8gRXhjZXB0aW9u
cyBhcmUgdGhyb3duIGJ5IGNvb2tpZSgpIGluIHNhbmRib3hlZCBmcmFtZXMuIFRoYXQgd29uJ3Qg
aGFwcGVuIGhlcmUKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlICJkb2N1bWVudCIgaXMgdGhl
IGRvY3VtZW50IG9mIHRoZSBtYWluIGZyYW1lIG9mIHRoZSBwYWdlLgorICAgICAgICAgICAgICAg
IEFTU0VSVCghZWMpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQg
Y29va2llc1NpemUgPSBkb2NDb29raWVzTGlzdC5zaXplKCk7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb29raWVzU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcmF3Q29va2llc0xpc3QuY29udGFpbnMoZG9jQ29va2llc0xpc3RbaV0pKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmF3Q29va2llc0xpc3QuYWRkKGRvY0Nvb2tpZXNMaXN0W2ldKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocmF3Q29va2llc0ltcGxlbWVudGVkKQorICAgICAgICAqY29va2llcyA9IGJ1aWxkQXJy
YXlGb3JDb29raWVzKHJhd0Nvb2tpZXNMaXN0KTsKKyAgICBlbHNlCisgICAgICAgICpjb29raWVz
U3RyaW5nID0gc3RyaW5nQ29va2llc0xpc3Q7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IEluc3BlY3RvckFnZW50OjpidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29r
aWU+JiBjb29raWVzTGlzdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvb2tpZXMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICBMaXN0SGFzaFNldDxDb29raWU+Ojpp
dGVyYXRvciBlbmQgPSBjb29raWVzTGlzdC5lbmQoKTsKKyAgICBMaXN0SGFzaFNldDxDb29raWU+
OjppdGVyYXRvciBpdCA9IGNvb2tpZXNMaXN0LmJlZ2luKCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGl0ICE9IGVuZDsgKytpdCwgaSsrKQorICAgICAgICBjb29raWVzLT5wdXNoT2JqZWN0KGJ1aWxk
T2JqZWN0Rm9yQ29va2llKCppdCkpOworCisgICAgcmV0dXJuIGNvb2tpZXM7Cit9CisKK1Bhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JBZ2VudDo6YnVpbGRPYmplY3RGb3JDb29r
aWUoY29uc3QgQ29va2llJiBjb29raWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHZhbHVlLT5zZXRTdHJpbmco
Im5hbWUiLCBjb29raWUubmFtZSk7CisgICAgdmFsdWUtPnNldFN0cmluZygidmFsdWUiLCBjb29r
aWUudmFsdWUpOworICAgIHZhbHVlLT5zZXRTdHJpbmcoImRvbWFpbiIsIGNvb2tpZS5kb21haW4p
OworICAgIHZhbHVlLT5zZXRTdHJpbmcoInBhdGgiLCBjb29raWUucGF0aCk7CisgICAgdmFsdWUt
PnNldE51bWJlcigiZXhwaXJlcyIsIGNvb2tpZS5leHBpcmVzKTsKKyAgICB2YWx1ZS0+c2V0TnVt
YmVyKCJzaXplIiwgKGNvb2tpZS5uYW1lLmxlbmd0aCgpICsgY29va2llLnZhbHVlLmxlbmd0aCgp
KSk7CisgICAgdmFsdWUtPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgY29va2llLmh0dHBPbmx5KTsK
KyAgICB2YWx1ZS0+c2V0Qm9vbGVhbigic2VjdXJlIiwgY29va2llLnNlY3VyZSk7CisgICAgdmFs
dWUtPnNldEJvb2xlYW4oInNlc3Npb24iLCBjb29raWUuc2Vzc2lvbik7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKSkgewor
ICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAg
aWYgKGRvY3VtZW50LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNl
TWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxs
Q2FjaGVkUmVzb3VyY2VzKCk7CisgICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVu
dFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7Cisg
ICAgICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQYXJzZWRV
UkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgY29va2llTmFtZSk7CisgICAgfQorfQorCisj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkVXNlRE9NU3Rv
cmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1l
KiBmcmFtZSkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3Rv
cmFnZVJlc291cmNlcy5lbmQoKTsKKyAgICBmb3IgKERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRvbVN0b3Jh
Z2VFbmQ7ICsraXQpCisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc1NhbWVIb3N0QW5kVHlwZShm
cmFtZSwgaXNMb2NhbFN0b3JhZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PFN0b3JhZ2U+IGRvbVN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUoZnJhbWUsIHN0b3JhZ2VBcmVh
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiByZXNvdXJjZSA9IElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6Y3JlYXRlKGRvbVN0b3JhZ2UuZ2V0KCksIGlzTG9j
YWxTdG9yYWdlLCBmcmFtZSk7CisKKyAgICBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuc2V0KHJlc291
cmNlLT5pZCgpLCByZXNvdXJjZSk7CisKKyAgICAvLyBSZXNvdXJjZXMgYXJlIG9ubHkgYm91bmQg
d2hpbGUgdmlzaWJsZS4KKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgcmVzb3VyY2UtPmJp
bmQobV9mcm9udGVuZC5nZXQoKSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfU09DS0VU
UykKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50
VVJMKQoreworICAgIGlmICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7CisKKyAgICBpZiAobV9yZXNvdXJjZUFnZW50KQorICAgICAgICBt
X3Jlc291cmNlQWdlbnQtPmRpZENyZWF0ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJM
KTsKKyAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnRVUkwpOworfQorCit2b2lkIEluc3BlY3RvckFn
ZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAg
IGlmIChtX3Jlc291cmNlQWdlbnQpCisgICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZpZXIsIHJlcXVlc3QpOworfQorCit2b2lk
IEluc3BlY3RvckFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAgICAgICAgbV9yZXNvdXJj
ZUFnZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRpZmllciwg
cmVzcG9uc2UpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRDbG9zZVdlYlNvY2tldCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKKyAg
ICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb2ZpbGVyQWdlbnQtPmlzUmVjb3JkaW5n
VXNlckluaXRpYXRlZFByb2ZpbGUoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6c3RhcnRV
c2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7CisgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRpYXRl
ZFByb2ZpbGluZywgdHJ1ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnN0b3BVc2VySW5p
dGlhdGVkUHJvZmlsaW5nKCkKK3sKKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKKyAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmls
aW5nLCBmYWxzZSk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OnByb2ZpbGVyRW5hYmxlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGVuYWJsZWQoKSAmJiBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJs
ZWQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdh
eXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKK3sKKyAgICBpZiAoYWx3YXlzKQorICAgICAgICBtX3Nl
dHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpQcm9maWxlckFsd2F5c0VuYWJs
ZWQsIHRydWUpOworICAgIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlKHNraXBSZWNvbXBpbGUpOwor
fQorCit2b2lkIEluc3BlY3RvckFnZW50OjpkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMpCit7
CisgICAgaWYgKGFsd2F5cykKKyAgICAgICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVhbihJbnNwZWN0
b3JTZXR0aW5nczo6UHJvZmlsZXJBbHdheXNFbmFibGVkLCBmYWxzZSk7CisgICAgbV9wcm9maWxl
ckFnZW50LT5kaXNhYmxlKCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkKK3sK
KyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlYnVnZ2Vy
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZnJvbnRlbmQpIHsKKyAg
ICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7CisgICAgICAgIHNob3dQYW5l
bChTY3JpcHRzUGFuZWwpOworICAgIH0gZWxzZQorICAgICAgICBlbmFibGVEZWJ1Z2dlcihmYWxz
ZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlz
KQoreworICAgIEFTU0VSVCghZGVidWdnZXJFbmFibGVkKCkpOworICAgIGlmIChhbHdheXMpCisg
ICAgICAgIG1fc2V0dGluZ3MtPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OkRlYnVnZ2Vy
QWx3YXlzRW5hYmxlZCwgdHJ1ZSk7CisKKyAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsKKwor
ICAgIG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlz
LCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50ID0gSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX2Jyb3dzZXJEZWJ1
Z2dlckFnZW50LT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGluc3BlY3RlZFVSTCgpKTsKKworICAgIG1f
ZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRW5hYmxlZCgpOworfQorCit2b2lkIEluc3BlY3RvckFnZW50
OjpkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCit7CisgICAgaWYgKCFlbmFibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChhbHdheXMpCisgICAgICAgIG1fc2V0dGluZ3MtPnNl
dEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OkRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2Up
OworCisgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CisKKyAgICBtX2RlYnVnZ2VyQWdlbnQu
Y2xlYXIoKTsKKyAgICBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50LmNsZWFyKCk7CisKKyAgICBtX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duID0gZmFsc2U7CisKKyAgICBpZiAobV9mcm9udGVuZCkKKyAg
ICAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOworfQorCit2b2lkIEluc3Bl
Y3RvckFnZW50OjpyZXN1bWUoKQoreworICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCisgICAgICAg
IG1fZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNl
dEFsbEJyb3dzZXJCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtw
b2ludHMpCit7CisgICAgbV9zdGF0ZS0+c2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2Vy
QnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzKTsKK30KKyNlbmRpZgorCit2b2lkIEluc3BlY3RvckFn
ZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IHNjcmlwdCkKK3sKKyAgICBpZiAobV9mcm9udGVuZCkKKyAgICAgICAgbV9mcm9udGVuZC0+ZXZh
bHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7CisgICAgZWxzZQorICAgICAg
ICBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5hcHBlbmQocGFpcjxsb25nLCBTdHJpbmc+
KGNhbGxJZCwgc2NyaXB0KSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZEV2YWx1YXRl
Rm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3VsdCkK
K3sKKyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRl
YnVnZ2VyV29ybGQoKSwgbV9pbnNwZWN0ZWRQYWdlKTsKKyAgICBTY3JpcHRPYmplY3Qgd2luZG93
OworICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KHNjcmlwdFN0YXRlLCAid2luZG93Iiwgd2lu
ZG93KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24od2luZG93LCAiZGlkRXZhbHVh
dGVGb3JUZXN0SW5Gcm9udGVuZCIpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJ
ZCk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoanNvblJlc3VsdCk7CisgICAgZnVuY3Rp
b24uY2FsbCgpOworfQorCitzdGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYg
cXVhZCkKK3sKKyAgICBQYXRoIHF1YWRQYXRoOworICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAx
KCkpOworICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAyKCkpOworICAgIHF1YWRQYXRoLmFk
ZExpbmVUbyhxdWFkLnAzKCkpOworICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOwor
ICAgIHF1YWRQYXRoLmNsb3NlU3VicGF0aCgpOworICAgIHJldHVybiBxdWFkUGF0aDsKK30KKwor
c3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKK3sKKyAgICBzdGF0
aWMgY29uc3QgaW50IG91dGxpbmVUaGlja25lc3MgPSAyOworICAgIHN0YXRpYyBjb25zdCBDb2xv
ciBvdXRsaW5lQ29sb3IoNjIsIDg2LCAxODAsIDIyOCk7CisKKyAgICBQYXRoIHF1YWRQYXRoID0g
cXVhZFRvUGF0aChxdWFkKTsKKworICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVuIGRyYXcg
d2l0aCBhIDJweCBzdHJva2UgdG8gZ2V0IGEgcGl4ZWwKKyAgICAvLyBvZiBvdXRsaW5lIChiZWNh
dXNlIGluZmxhdGluZyBhIHF1YWQgaXMgaGFyZCkKKyAgICB7CisgICAgICAgIGNvbnRleHQuc2F2
ZSgpOworICAgICAgICBjb250ZXh0LmNsaXBPdXQocXVhZFBhdGgpOworCisgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG91dGxpbmVUaGlja25lc3MpOworICAgICAgICBjb250ZXh0
LnNldFN0cm9rZUNvbG9yKG91dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aChxdWFkUGF0aCk7CisKKyAgICAgICAgY29udGV4dC5yZXN0
b3JlKCk7CisgICAgfQorCisgICAgLy8gTm93IGRvIHRoZSBmaWxsCisgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoZmlsbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBjb250ZXh0LmZp
bGxQYXRoKHF1YWRQYXRoKTsKK30KKworc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhD
bGlwKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25z
dCBGbG9hdFF1YWQmIGNsaXBRdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQoreworICAgIGNv
bnRleHQuc2F2ZSgpOworICAgIFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVh
ZCk7CisgICAgY29udGV4dC5jbGlwT3V0KGNsaXBRdWFkUGF0aCk7CisgICAgZHJhd091dGxpbmVk
UXVhZChjb250ZXh0LCBxdWFkLCBmaWxsQ29sb3IpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwor
fQorCitzdGF0aWMgdm9pZCBkcmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRRdWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRk
aW5nUXVhZCwgY29uc3QgRmxvYXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1h
cmdpblF1YWQpCit7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xvcigxMjUs
IDE3MywgMjE3LCAxMjgpOworICAgIHN0YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94Q29sb3Io
MTI1LCAxNzMsIDIxNywgMTYwKTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVyQm94Q29s
b3IoMTI1LCAxNzMsIDIxNywgMTkyKTsKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFyZ2luQm94
Q29sb3IoMTI1LCAxNzMsIDIxNywgMjI4KTsKKworICAgIGlmIChtYXJnaW5RdWFkICE9IGJvcmRl
clF1YWQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5R
dWFkLCBib3JkZXJRdWFkLCBtYXJnaW5Cb3hDb2xvcik7CisgICAgaWYgKGJvcmRlclF1YWQgIT0g
cGFkZGluZ1F1YWQpCisgICAgICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBi
b3JkZXJRdWFkLCBwYWRkaW5nUXVhZCwgYm9yZGVyQm94Q29sb3IpOworICAgIGlmIChwYWRkaW5n
UXVhZCAhPSBjb250ZW50UXVhZCkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNv
bnRleHQsIHBhZGRpbmdRdWFkLCBjb250ZW50UXVhZCwgcGFkZGluZ0JveENvbG9yKTsKKworICAg
IGRyYXdPdXRsaW5lZFF1YWQoY29udGV4dCwgY29udGVudFF1YWQsIGNvbnRlbnRCb3hDb2xvcik7
Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVC
b3hRdWFkcykKK3sKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgbGluZUJveENvbG9yKDEyNSwgMTcz
LCAyMTcsIDEyOCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5z
aXplKCk7ICsraSkKKyAgICAgICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBsaW5lQm94UXVh
ZHNbaV0sIGxpbmVCb3hDb2xvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0RnJv
bUZyYW1lVG9NYWluRnJhbWUoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQoreworICAgIHJl
Y3QgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRz
KGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVjdCkpOworfQorCitzdGF0aWMgaW5s
aW5lIEludFNpemUgZnJhbWVUb01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCit7CisgICAg
SW50UG9pbnQgbWFpbkZyYW1lUG9pbnQgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coSW50
UG9pbnQoKSkpOworICAgIHJldHVybiBtYWluRnJhbWVQb2ludCAtIEludFBvaW50KCk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoIW1faGlnaGxpZ2h0ZWROb2RlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9oaWdobGlnaHRlZE5vZGUt
PnJlbmRlcmVyKCk7CisgICAgRnJhbWUqIGNvbnRhaW5pbmdGcmFtZSA9IG1faGlnaGxpZ2h0ZWRO
b2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghcmVuZGVyZXIgfHwgIWNvbnRhaW5p
bmdGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSBtYWluRnJhbWVPZmZzZXQg
PSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KGNvbnRhaW5pbmdGcmFtZSk7CisgICAgSW50UmVjdCBi
b3VuZGluZ0JveCA9IHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCh0cnVlKTsKKyAg
ICBib3VuZGluZ0JveC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7CisKKyAgICBJbnRSZWN0IHRpdGxl
UmVmZXJlbmNlQm94ID0gYm91bmRpbmdCb3g7CisKKyAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdl
KTsKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKyAgICBGbG9hdFJlY3Qgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVu
dFJlY3QoKTsKKyAgICBpZiAoIW92ZXJsYXlSZWN0LmNvbnRhaW5zKGJvdW5kaW5nQm94KSAmJiAh
Ym91bmRpbmdCb3guY29udGFpbnMoZW5jbG9zaW5nSW50UmVjdChvdmVybGF5UmVjdCkpKQorICAg
ICAgICBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOworICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1vdmVybGF5UmVjdC54KCksIC1vdmVybGF5UmVjdC55KCkpOworCisgICAg
Ly8gUmVuZGVyU1ZHUm9vdCBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgaXNCb3go
KSBjb2RlIHBhdGgsIGFsbCBvdGhlciBTVkcgZWxlbWVudHMgc2hvdWxkIGp1c3QgZHVtcCB0aGVp
ciBhYnNvbHV0ZVF1YWRzKCkuCisjaWYgRU5BQkxFKFNWRykKKyAgICBib29sIGlzU1ZHUmVuZGVy
ZXIgPSByZW5kZXJlci0+bm9kZSgpICYmIHJlbmRlcmVyLT5ub2RlKCktPmlzU1ZHRWxlbWVudCgp
ICYmICFyZW5kZXJlci0+aXNTVkdSb290KCk7CisjZWxzZQorICAgIGJvb2wgaXNTVkdSZW5kZXJl
ciA9IGZhbHNlOworI2VuZGlmCisKKyAgICBpZiAocmVuZGVyZXItPmlzQm94KCkgJiYgIWlzU1ZH
UmVuZGVyZXIpIHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChy
ZW5kZXJlcik7CisKKyAgICAgICAgSW50UmVjdCBjb250ZW50Qm94ID0gcmVuZGVyQm94LT5jb250
ZW50Qm94UmVjdCgpOworCisgICAgICAgIEludFJlY3QgcGFkZGluZ0JveChjb250ZW50Qm94Lngo
KSAtIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSwgY29udGVudEJveC55KCkgLSByZW5kZXJCb3gt
PnBhZGRpbmdUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRCb3gud2lk
dGgoKSArIHJlbmRlckJveC0+cGFkZGluZ0xlZnQoKSArIHJlbmRlckJveC0+cGFkZGluZ1JpZ2h0
KCksIGNvbnRlbnRCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdUb3AoKSArIHJlbmRl
ckJveC0+cGFkZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBib3JkZXJCb3gocGFkZGlu
Z0JveC54KCkgLSByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSwgcGFkZGluZ0JveC55KCkgLSByZW5k
ZXJCb3gtPmJvcmRlclRvcCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm94
LndpZHRoKCkgKyByZW5kZXJCb3gtPmJvcmRlckxlZnQoKSArIHJlbmRlckJveC0+Ym9yZGVyUmln
aHQoKSwgcGFkZGluZ0JveC5oZWlnaHQoKSArIHJlbmRlckJveC0+Ym9yZGVyVG9wKCkgKyByZW5k
ZXJCb3gtPmJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgSW50UmVjdCBtYXJnaW5Cb3goYm9yZGVy
Qm94LngoKSAtIHJlbmRlckJveC0+bWFyZ2luTGVmdCgpLCBib3JkZXJCb3gueSgpIC0gcmVuZGVy
Qm94LT5tYXJnaW5Ub3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm94Lndp
ZHRoKCkgKyByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQo
KSwgYm9yZGVyQm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5tYXJnaW5Ub3AoKSArIHJlbmRlckJv
eC0+bWFyZ2luQm90dG9tKCkpOworCisgICAgICAgIHRpdGxlUmVmZXJlbmNlQm94ID0gbWFyZ2lu
Qm94OworICAgICAgICB0aXRsZVJlZmVyZW5jZUJveC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Cisg
ICAgICAgIHRpdGxlUmVmZXJlbmNlQm94Lm1vdmUoYm91bmRpbmdCb3gueCgpLCBib3VuZGluZ0Jv
eC55KCkpOworCisgICAgICAgIEZsb2F0UXVhZCBhYnNDb250ZW50UXVhZCA9IHJlbmRlckJveC0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY29udGVudEJveCkpOworICAgICAgICBGbG9h
dFF1YWQgYWJzUGFkZGluZ1F1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KHBhZGRpbmdCb3gpKTsKKyAgICAgICAgRmxvYXRRdWFkIGFic0JvcmRlclF1YWQgPSBy
ZW5kZXJCb3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvcmRlckJveCkpOworICAg
ICAgICBGbG9hdFF1YWQgYWJzTWFyZ2luUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRl
UXVhZChGbG9hdFJlY3QobWFyZ2luQm94KSk7CisKKyAgICAgICAgYWJzQ29udGVudFF1YWQubW92
ZShtYWluRnJhbWVPZmZzZXQpOworICAgICAgICBhYnNQYWRkaW5nUXVhZC5tb3ZlKG1haW5GcmFt
ZU9mZnNldCk7CisgICAgICAgIGFic0JvcmRlclF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwor
ICAgICAgICBhYnNNYXJnaW5RdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKKworICAgICAgICBk
cmF3SGlnaGxpZ2h0Rm9yQm94KGNvbnRleHQsIGFic0NvbnRlbnRRdWFkLCBhYnNQYWRkaW5nUXVh
ZCwgYWJzQm9yZGVyUXVhZCwgYWJzTWFyZ2luUXVhZCk7CisgICAgfSBlbHNlIGlmIChyZW5kZXJl
ci0+aXNSZW5kZXJJbmxpbmUoKSB8fCBpc1NWR1JlbmRlcmVyKSB7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc2hvdyBtYXJnaW5zL3BhZGRpbmcvYm9yZGVyIGZvciBpbmxpbmVzLgorICAg
ICAgICBWZWN0b3I8RmxvYXRRdWFkPiBsaW5lQm94UXVhZHM7CisgICAgICAgIHJlbmRlcmVyLT5h
YnNvbHV0ZVF1YWRzKGxpbmVCb3hRdWFkcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsaW5lQm94UXVhZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBsaW5lQm94UXVhZHNb
aV0gKz0gbWFpbkZyYW1lT2Zmc2V0OworCisgICAgICAgIGRyYXdIaWdobGlnaHRGb3JMaW5lQm94
ZXNPclNWR1JlbmRlcmVyKGNvbnRleHQsIGxpbmVCb3hRdWFkcyk7CisgICAgfQorCisgICAgLy8g
RHJhdyBub2RlIHRpdGxlIGlmIG5lY2Vzc2FyeS4KKworICAgIGlmICghbV9oaWdobGlnaHRlZE5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6U2V0
dGluZ3MqIHNldHRpbmdzID0gY29udGFpbmluZ0ZyYW1lLT5zZXR0aW5ncygpOworICAgIGRyYXdF
bGVtZW50VGl0bGUoY29udGV4dCwgdGl0bGVSZWZlcmVuY2VCb3gsIG92ZXJsYXlSZWN0LCBzZXR0
aW5ncyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxv
YXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKSBjb25zdAor
eworICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7CisgICAgc3RhdGljIGNv
bnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKKyAgICBzdGF0aWMgY29uc3QgaW50IGJvcmRlcldp
ZHRoUHggPSAxOworICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQmFja2dyb3VuZENvbG9y
KDI1NSwgMjU1LCAxOTQsIDI1NSk7CisgICAgc3RhdGljIGNvbnN0IENvbG9yIHRvb2x0aXBCb3Jk
ZXJDb2xvcihDb2xvcjo6YmxhY2spOworICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwRm9u
dENvbG9yKENvbG9yOjpibGFjayk7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG1faGlnaGxpZ2h0ZWROb2RlLmdldCgpKTsKKyAgICBib29sIGlzWEhUTUwg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKKyAgICBTdHJpbmcgbm9k
ZVRpdGxlID0gaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50LT5ub2RlTmFt
ZSgpLmxvd2VyKCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0gZWxlbWVudC0+
Z2V0SWRBdHRyaWJ1dGUoKTsKKyAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYgIWlkVmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIG5vZGVUaXRsZSArPSAiIyI7CisgICAgICAgIG5vZGVUaXRs
ZSArPSBpZFZhbHVlOworICAgIH0KKyAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3MoKSAmJiBlbGVt
ZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQp
LT5jbGFzc05hbWVzKCk7CisgICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9IGNsYXNzTmFt
ZXNTdHJpbmcuc2l6ZSgpOworICAgICAgICBpZiAoY2xhc3NOYW1lQ291bnQpIHsKKyAgICAgICAg
ICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0cmluZ1tpXTsK
KyAgICAgICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xhc3NOYW1lKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdXNlZENsYXNz
TmFtZXMuYWRkKGNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgbm9kZVRpdGxlICs9ICIuIjsK
KyAgICAgICAgICAgICAgICBub2RlVGl0bGUgKz0gY2xhc3NOYW1lOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgRWxlbWVudCogaGlnaGxpZ2h0ZWRFbGVtZW50ID0gbV9o
aWdobGlnaHRlZE5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHN0YXRpY19jYXN0PEVsZW1lbnQqPiht
X2hpZ2hsaWdodGVkTm9kZS5nZXQoKSkgOiAwOworICAgIG5vZGVUaXRsZSArPSAiIFsiOworICAg
IG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdobGln
aHRlZEVsZW1lbnQtPm9mZnNldFdpZHRoKCkgOiBib3VuZGluZ0JveC53aWR0aCgpKTsKKyAgICBu
b2RlVGl0bGUuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigweDAwRDcpKTsgLy8gJnRpbWVzOwor
ICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1lbnQgPyBoaWdo
bGlnaHRlZEVsZW1lbnQtPm9mZnNldEhlaWdodCgpIDogYm91bmRpbmdCb3guaGVpZ2h0KCkpOwor
ICAgIG5vZGVUaXRsZSArPSAiXSI7CisKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBG
b250RmFtaWx5IGZhbWlseTsKKyAgICBmYW1pbHkuc2V0RmFtaWx5KHNldHRpbmdzLT5maXhlZEZv
bnRGYW1pbHkoKSk7CisgICAgZGVzYy5zZXRGYW1pbHkoZmFtaWx5KTsKKyAgICBkZXNjLnNldENv
bXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOworICAgIEZvbnQgZm9udCA9IEZvbnQoZGVzYywgMCwg
MCk7CisgICAgZm9udC51cGRhdGUoMCk7CisKKyAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2Rl
VGl0bGUpOworICAgIEludFBvaW50IHRpdGxlQmFzZVBvaW50ID0gYm91bmRpbmdCb3guYm90dG9t
TGVmdCgpOworICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdEluZmxh
dGVQeCk7CisgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2Vs
ZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhlaWdo
dFB4KSk7CisgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CisKKyAgICAvLyBU
aGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFweC10aGljayBi
b3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5nbGUpLgorICAg
IGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OworICAgIGludCBkeSA9IGJvcmRlcldpZHRoUHg7CisK
KyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIG92ZXJsYXlSZWN0
LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCisgICAgaWYgKHRp
dGxlUmVjdC5yaWdodCgpID4gb3ZlcmxheVJlY3QucmlnaHQoKSkKKyAgICAgICAgZHggPSBvdmVy
bGF5UmVjdC5yaWdodCgpIC0gdGl0bGVSZWN0LnJpZ2h0KCk7CisKKyAgICAvLyBJZiB0aGUgdGlw
IHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3QsIGxlZnQtYWxpZ24gdGhlIHRp
cCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgorICAgIGlmICh0aXRsZVJlY3QueCgpICsgZHggPCBv
dmVybGF5UmVjdC54KCkpCisgICAgICAgIGR4ID0gb3ZlcmxheVJlY3QueCgpIC0gdGl0bGVSZWN0
LngoKSAtIGJvcmRlcldpZHRoUHg7CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQg
dGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBib3VuZGlu
ZyBib3guCisgICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgp
KSB7CisgICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpIC0g
Ym9yZGVyV2lkdGhQeDsKKyAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlja3MgYmV5b25k
IHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlwIHdpdGggdGhl
IHNhaWQgYm91bmRhcnkuCisgICAgICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkgKyBkeSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKQorICAgICAgICAgICAgZHkgPSBvdmVybGF5UmVjdC5ib3R0b20o
KSAtIHRpdGxlUmVjdC5ib3R0b20oKTsKKyAgICB9CisKKyAgICAvLyBJZiB0aGUgdGlwIHN0aWNr
cyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBvZiBv
dmVybGF5UmVjdC4KKyAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgb3ZlcmxheVJlY3QueSgp
KQorICAgICAgICBkeSA9IG92ZXJsYXlSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkgKyBib3JkZXJX
aWR0aFB4OworCisgICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKKyAgICBjb250ZXh0LnNldFN0
cm9rZUNvbG9yKHRvb2x0aXBCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAg
Y29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7CisgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IodG9vbHRpcEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CisgICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHRvb2x0aXBGb250Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworICAgIGNvbnRleHQu
ZHJhd1RleHQoZm9udCwgbm9kZVRpdGxlUnVuLCBJbnRQb2ludCh0aXRsZVJlY3QueCgpICsgcmVj
dEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSkp
OworfQorCit2b2lkIEluc3BlY3RvckFnZW50OjpvcGVuSW5JbnNwZWN0ZWRXaW5kb3coY29uc3Qg
U3RyaW5nJiB1cmwpCit7CisgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCk7CisKKyAgICBGcmFtZUxvYWRSZXF1ZXN0IHJlcXVlc3QobWFpbkZyYW1lLT5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QoKSwgIl9ibGFuayIp
OworCisgICAgYm9vbCBjcmVhdGVkOworICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0ZlYXR1cmVz
OworICAgIEZyYW1lKiBuZXdGcmFtZSA9IFdlYkNvcmU6OmNyZWF0ZVdpbmRvdyhtYWluRnJhbWUs
IG1haW5GcmFtZSwgcmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIGNyZWF0ZWQpOworICAgIGlmICgh
bmV3RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGlu
ZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICBuZXdGcmFtZS0+
bG9hZGVyKCktPnNldE9wZW5lcihtYWluRnJhbWUpOworICAgIG5ld0ZyYW1lLT5wYWdlKCktPnNl
dE9wZW5lZEJ5RE9NKCk7CisgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlvbiht
YWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIG5ld0ZyYW1lLT5sb2FkZXIo
KS0+Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxzZSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3RyaW5nJiBzb3VyY2Up
Cit7CisgICAgbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5hcHBlbmQoc291cmNlKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVtb3ZlQWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQor
eworICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuY2xlYXIoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JBZ2VudDo6c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNl
KQoreworICAgIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJID0gc291cmNlOworfQorCitLVVJMIElu
c3BlY3RvckFnZW50OjppbnNwZWN0ZWRVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX2luc3Bl
Y3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQWdlbnQ6OnJlbG9hZFBhZ2UoKQoreworICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ugc2V0IHRo
ZSB1c2VyIGdlc3R1cmUgaW5kaWNhdG9yIGhlcmU/CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIG1faW5zcGVj
dGVkUGFnZS0+bWFpbkZyYW1lKCktPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZy
ZXNoKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNldEV4dHJhSGVhZGVycyhQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykKK3sKKyAgICBtX2V4dHJhSGVhZGVycyA9IGFk
b3B0UHRyKG5ldyBIVFRQSGVhZGVyTWFwKCkpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaGVhZGVycy0+ZW5kKCk7CisgICAgZm9yIChJbnNwZWN0b3JPYmplY3Q6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5hc1N0cmlu
ZygmdmFsdWUpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1fZXh0cmFIZWFkZXJz
LT5hZGQoaXQtPmZpcnN0LCB2YWx1ZSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MjUyYTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckFnZW50LmgKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
SW5zcGVjdG9yQWdlbnRfaAorI2RlZmluZSBJbnNwZWN0b3JBZ2VudF9oCisKKyNpbmNsdWRlICJD
aGFyYWN0ZXJEYXRhLmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkNvb2tpZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBDaGFyYWN0ZXJE
YXRhOworY2xhc3MgRGF0YWJhc2U7CitjbGFzcyBET01XcmFwcGVyV29ybGQ7CitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIERvY3VtZW50TG9hZGVyOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworY2xhc3MgSFRUUEhlYWRlck1hcDsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7
CitjbGFzcyBJbmplY3RlZFNjcmlwdDsKK2NsYXNzIEluamVjdGVkU2NyaXB0SG9zdDsKK2NsYXNz
IEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CitjbGFz
cyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDsKK2NsYXNzIEluc3BlY3RvckNsaWVudDsK
K2NsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7
CitjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKK2NsYXNzIEluc3BlY3RvckRPTUFnZW50OworY2xh
c3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OworY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJl
c291cmNlOworY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDsKK2NsYXNzIEluc3BlY3RvckRh
dGFiYXNlUmVzb3VyY2U7CitjbGFzcyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OworY2xhc3MgSW5z
cGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENsaWVudDsKK2NsYXNzIElu
c3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ7CitjbGFzcyBJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50OworY2xhc3MgSW5zcGVjdG9yUnVudGltZUFnZW50OworY2xhc3Mg
SW5zcGVjdG9yU2V0dGluZ3M7CitjbGFzcyBJbnNwZWN0b3JTdGF0ZTsKK2NsYXNzIEluc3BlY3Rv
clN0b3JhZ2VBZ2VudDsKK2NsYXNzIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ7CitjbGFzcyBJbnNw
ZWN0b3JWYWx1ZTsKK2NsYXNzIEluc3BlY3RvcldvcmtlclJlc291cmNlOworY2xhc3MgSW50UmVj
dDsKK2NsYXNzIEtVUkw7CitjbGFzcyBOb2RlOworY2xhc3MgUGFnZTsKK2NsYXNzIFJlc291cmNl
UmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBSZXNvdXJjZUVycm9yOwor
Y2xhc3MgU2NyaXB0QXJndW1lbnRzOworY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOworY2xhc3MgU2Ny
aXB0UHJvZmlsZTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFN0b3JhZ2VBcmVhOworCisj
aWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKK2NsYXNzIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorY2xh
c3MgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX1NP
Q0tFVFMpCitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0OworY2xhc3MgV2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2U7CisjZW5kaWYKKworY2xhc3MgSW5zcGVjdG9yQWdlbnQgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgQ29uc29s
ZVBhbmVsOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVtZW50c1BhbmVsOworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBTY3JpcHRzUGFuZWw7CisKKyAgICBJbnNwZWN0b3JBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKiwgUGFnZSosIEluc3BlY3RvckNsaWVudCopOworICAgIHZpcnR1YWwgfklu
c3BlY3RvckFnZW50KCk7CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogaW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmdldCgpOyB9CisgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQoKSB7IHJl
dHVybiBtX2NsaWVudDsgfQorICAgIEluamVjdGVkU2NyaXB0SG9zdCogaW5qZWN0ZWRTY3JpcHRI
b3N0KCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdEhvc3QuZ2V0KCk7IH0KKworICAgIHZvaWQg
aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpOworCisgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CisK
KyAgICBQYWdlKiBpbnNwZWN0ZWRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNwZWN0ZWRQYWdl
OyB9CisgICAgS1VSTCBpbnNwZWN0ZWRVUkwoKSBjb25zdDsKKyAgICB2b2lkIHJlbG9hZFBhZ2Uo
KTsKKworICAgIHZvaWQgcmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJp
bmcmIGluc3BlY3RvckNvb2tpZSk7CisKKyAgICB2b2lkIGluc3BlY3QoTm9kZSopOworICAgIHZv
aWQgaGlnaGxpZ2h0KE5vZGUqKTsKKyAgICB2b2lkIGhpZGVIaWdobGlnaHQoKTsKKyAgICB2b2lk
IGhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpOworICAgIHZvaWQgaGlkZURPTU5vZGVIaWdo
bGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsgfQorCisgICAgdm9pZCBoaWdobGlnaHRGcmFtZSh1
bnNpZ25lZCBsb25nIGZyYW1lSWQpOworICAgIHZvaWQgaGlkZUZyYW1lSGlnaGxpZ2h0KCkgeyBo
aWRlSGlnaGxpZ2h0KCk7IH0KKworICAgIHZvaWQgc2hvdygpOworICAgIHZvaWQgc2hvd1BhbmVs
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIHZvaWQgY29ubmVjdEZy
b250ZW5kKCk7CisgICAgdm9pZCByZXVzZUZyb250ZW5kKCk7CisgICAgdm9pZCBkaXNjb25uZWN0
RnJvbnRlbmQoKTsKKyAgICBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2Zyb250ZW5kLmdldCgpOyB9CisKKyAgICBJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBy
ZXNvdXJjZUFnZW50KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVyOyB9OworICAgIEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICBJbnNwZWN0b3JD
b25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCgpIHsgcmV0dXJuIG1fY29uc29sZUFnZW50LmdldCgp
OyB9CisgICAgSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50KCkgeyByZXR1cm4gbV9jc3NBZ2Vu
dC5nZXQoKTsgfQorICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsgcmV0dXJuIG1f
ZG9tQWdlbnQuZ2V0KCk7IH0KKyAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0
QWdlbnQoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKTsgfQorICAgIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudCogcnVudGltZUFnZW50KCkgeyByZXR1cm4gbV9ydW50aW1lQWdlbnQu
Z2V0KCk7IH0KKyAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50KCkgeyBy
ZXR1cm4gbV90aW1lbGluZUFnZW50LmdldCgpOyB9CisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAg
IEluc3BlY3RvckRhdGFiYXNlQWdlbnQqIGRhdGFiYXNlQWdlbnQoKSB7IHJldHVybiBtX2RhdGFi
YXNlQWdlbnQuZ2V0KCk7IH0KKyNlbmRpZgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQqIGRvbVN0b3JhZ2VBZ2VudCgpIHsgcmV0dXJuIG1fZG9t
U3RvcmFnZUFnZW50LmdldCgpOyB9CisjZW5kaWYKKyNpZiBFTkFCTEUoRklMRV9TWVNURU0pCisg
ICAgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KiBmaWxlU3lzdGVtQWdlbnQoKSB7IHJldHVybiBt
X2ZpbGVTeXN0ZW1BZ2VudC5nZXQoKTsgfQorI2VuZGlmCisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQqIGJyb3dzZXJEZWJ1
Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9icm93c2VyRGVidWdnZXJBZ2VudC5nZXQoKTsg
fQorICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJl
dHVybiBtX2RlYnVnZ2VyQWdlbnQuZ2V0KCk7IH0KKyAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50
KiBwcm9maWxlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlckFnZW50LmdldCgpOyB9
CisjZW5kaWYKKyNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCogYXBwbGljYXRpb25DYWNoZUFnZW50KCkgeyByZXR1
cm4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuZ2V0KCk7IH0KKyNlbmRpZgorCisKKyAgICBib29s
IHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdDsKKyAgICB2b2lkIG1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsK
KyAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKKworICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJv
bnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4pOworICAgIGJv
b2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2xpZW50OyB9CisKKyAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3Js
ZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOworCisgICAgdm9pZCBkaWRDb21taXRMb2FkKERv
Y3VtZW50TG9hZGVyKik7CisKKyAgICB2b2lkIHNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4pOworCisgICAgdm9pZCBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAg
ICB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7CisKKyAgICB2b2lkIGdldENvb2tpZXMoUmVm
UHRyPEluc3BlY3RvckFycmF5PiogY29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcp
OworICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3Qg
U3RyaW5nJiBkb21haW4pOworCisgICAgdm9pZCBtYWluUmVzb3VyY2VGaXJlZExvYWRFdmVudChE
b2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVk
RE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYpOworCisjaWYgRU5B
QkxFKFdPUktFUlMpCisgICAgZW51bSBXb3JrZXJBY3Rpb24geyBXb3JrZXJDcmVhdGVkLCBXb3Jr
ZXJEZXN0cm95ZWQgfTsKKworICAgIHZvaWQgcG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRl
bmQoY29uc3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmLCBXb3JrZXJBY3Rpb24pOworICAgIHZv
aWQgZGlkQ3JlYXRlV29ya2VyKGludHB0cl90LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZFdvcmtlcik7CisgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludHB0cl90KTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAgIHZvaWQgZGlkT3BlbkRhdGFiYXNlKFBhc3NS
ZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOworI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NUT1JB
R0UpCisgICAgdm9pZCBkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiwgYm9vbCBpc0xvY2Fs
U3RvcmFnZSwgRnJhbWUqKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorICAg
IHZvaWQgZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
S1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOworICAgIHZvaWQgd2ls
bFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYpOworICAgIHZvaWQgZGlkUmVjZWl2ZVdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
V2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmKTsKKyAgICB2b2lkIGRpZENsb3NlV2ViU29ja2V0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisjZW5kaWYKKworICAgIGJvb2wgaGFzRnJvbnRl
bmQoKSBjb25zdCB7IHJldHVybiBtX2Zyb250ZW5kOyB9CisKKyAgICB2b2lkIGRyYXdOb2RlSGln
aGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OworICAgIHZvaWQgb3BlbkluSW5zcGVjdGVk
V2luZG93KGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50VGl0bGUoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVj
dCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKikgY29uc3Q7CisKKyNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKKyAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKSBjb25zdDsKKyAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCkgeyBzdGFydFVzZXJJbml0
aWF0ZWRQcm9maWxpbmcoKTsgfQorICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7CisgICAgdm9pZCBzdG9wUHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpOyB9CisgICAgdm9pZCBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOworICAgIHZvaWQg
ZW5hYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21waWxlID0g
ZmFsc2UpOworICAgIHZvaWQgZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwor
ICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIHNob3dBbmRFbmFi
bGVEZWJ1Z2dlcigpOworICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOworICAg
IHZvaWQgZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOworICAgIGJvb2wgZGVi
dWdnZXJFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9CisgICAgdm9p
ZCByZXN1bWUoKTsKKworICAgIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0Pik7CisjZW5kaWYKKworICAgIC8vIEdlbmVyaWMgY29kZSBjYWxs
ZWQgZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgorICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZChsb25nIHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKKworICAg
IHZvaWQgYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSk7Cisg
ICAgdm9pZCByZW1vdmVBbGxTY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOworICAgIHZvaWQgc2V0
SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc291cmNlKTsKKworICAgIGJvb2wg
aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoKTsKKyAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0
dGFjaGVkKGJvb2wpOworICAgIHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyk7
CisgICAgbG9uZyBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0OworCisgICAgSW5zcGVj
dG9yU3RhdGUqIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZS5nZXQoKTsgfQorICAgIEluc3BlY3Rv
clNldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KKworICAg
IC8vIEluc3BlY3RvckFnZW50IEFQSQorICAgIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUoUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKTsKKyAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFi
bGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOworICAgIHZvaWQgcG9wdWxhdGVTY3Jp
cHRPYmplY3RzKCk7CisgICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFj
a2VuZCBhbmQgaW50ZXJuYWxseS4KKyAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSk7CisgICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOworCisgICAgLy8g
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIEFQSQorICAgIHZvaWQgZW5zdXJlU2V0dGluZ3NMb2Fk
ZWQoKTsKKyAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpOworICAgIHZvaWQgcmVz
dG9yZURlYnVnZ2VyKCk7CisgICAgZW51bSBQcm9maWxlclJlc3RvcmVBY3Rpb24geworICAgICAg
ICBQcm9maWxlclJlc3RvcmVOb0FjdGlvbiA9IDAsCisgICAgICAgIFByb2ZpbGVyUmVzdG9yZVJl
c2V0QWdlbnQgPSAxCisgICAgfTsKKyAgICB2b2lkIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJl
c3RvcmVBY3Rpb24pOworICAgIHZvaWQgdW5iaW5kQWxsUmVzb3VyY2VzKCk7CisgICAgdm9pZCBz
ZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCk7CisKKyAgICB2b2lkIHJlbGVhc2VGcm9u
dGVuZExpZmV0aW1lQWdlbnRzKCk7CisKKyNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
KyAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKKyNlbmRpZgorCisgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYp
OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExp
c3RIYXNoU2V0PENvb2tpZT4mKTsKKworICAgIHZvaWQgZm9jdXNOb2RlKCk7CisgICAgYm9vbCBp
c01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmIHJlcXVlc3RV
cmwpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOwor
ICAgIFBhZ2UqIG1faW5zcGVjdGVkUGFnZTsKKyAgICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50
OworICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVu
ZENsaWVudDsKKyAgICBib29sIG1fb3BlbmluZ0Zyb250ZW5kOworICAgIE93blB0cjxJbnNwZWN0
b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKKyAgICBPd25QdHI8SW5zcGVjdG9yQ1NTQWdlbnQ+IG1f
Y3NzQWdlbnQ7CisgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OworCisj
aWYgRU5BQkxFKERBVEFCQVNFKQorICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUFnZW50PiBt
X2RhdGFiYXNlQWdlbnQ7CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50PiBtX2RvbVN0b3JhZ2VBZ2VudDsKKyNlbmRp
ZgorCisgICAgT3duUHRyPEluc3BlY3RvclRpbWVsaW5lQWdlbnQ+IG1fdGltZWxpbmVBZ2VudDsK
KyAgICBPd25QdHI8SW5zcGVjdG9yU3RhdGU+IG1fc3RhdGU7CisgICAgT3duUHRyPEluc3BlY3Rv
clNldHRpbmdzPiBtX3NldHRpbmdzOworCisjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKKyAgICBPd25QdHI8SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50PiBtX2FwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQorICAg
IFJlZlB0cjxJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ+IG1fZmlsZVN5c3RlbUFnZW50OworI2Vu
ZGlmCisKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yUmVzb3VyY2VBZ2VudD4gbV9yZXNvdXJjZUFnZW50OworICAgIE93blB0cjxJbnNwZWN0b3JS
dW50aW1lQWdlbnQ+IG1fcnVudGltZUFnZW50OworCisjaWYgRU5BQkxFKERBVEFCQVNFKQorICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+
IERhdGFiYXNlUmVzb3VyY2VzTWFwOworICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fZGF0YWJh
c2VSZXNvdXJjZXM7CisjZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01T
dG9yYWdlUmVzb3VyY2VzTWFwOworICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9y
YWdlUmVzb3VyY2VzOworI2VuZGlmCisKKyAgICBTdHJpbmcgbV9zaG93QWZ0ZXJWaXNpYmxlOwor
ICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hsaWdodGVkTm9kZTsKKyAgICBPd25QdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CisgICAgUmVm
UHRyPEluamVjdGVkU2NyaXB0SG9zdD4gbV9pbmplY3RlZFNjcmlwdEhvc3Q7CisgICAgT3duUHRy
PEluc3BlY3RvckNvbnNvbGVBZ2VudD4gbV9jb25zb2xlQWdlbnQ7CisKKyAgICBWZWN0b3I8cGFp
cjxsb25nLCBTdHJpbmc+ID4gbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHM7CisgICAgVmVj
dG9yPFN0cmluZz4gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZDsKKyAgICBTdHJpbmcgbV9pbnNw
ZWN0b3JFeHRlbnNpb25BUEk7CisjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCisgICAg
Ym9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOworICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CisgICAgT3duUHRyPEluc3BlY3RvckJyb3dzZXJE
ZWJ1Z2dlckFnZW50PiBtX2Jyb3dzZXJEZWJ1Z2dlckFnZW50OworICAgIE93blB0cjxJbnNwZWN0
b3JQcm9maWxlckFnZW50PiBtX3Byb2ZpbGVyQWdlbnQ7CisjZW5kaWYKKyAgICBPd25QdHI8SFRU
UEhlYWRlck1hcD4gbV9leHRyYUhlYWRlcnM7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludHB0cl90LCBSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4g
V29ya2Vyc01hcDsKKworICAgIFdvcmtlcnNNYXAgbV93b3JrZXJzOworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JBZ2Vu
dF9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCAxY2NhNmZlLi4yNzc2YzU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFs
dWVzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIuaCIKQEAgLTQxLDggKzQxLDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6Okluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAgOiBt
X2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKK0luc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KEluc3BlY3Rv
ckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAg
IDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAsIG1fZnJvbnRlbmQoZnJv
bnRlbmQpCiB7CiB9CkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpuZXR3b3JrU3RhdGVDaGFuZ2VkKCkKIAogdm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVzKFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIGFwcGxpY2F0aW9uQ2FjaGVzKQogewotICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlciA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUo
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CisgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3Vt
ZW50TG9hZGVyID0gbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUo
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgaWYgKGRvY3VtZW50TG9hZGVyKSB7
CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0KiBob3N0ID0gZG9jdW1lbnRMb2FkZXItPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAgICAgIEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNo
ZUluZm8gaW5mbyA9IGhvc3QtPmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmgKaW5kZXggYWMwYWNiZi4uYjkzNTJmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaApAQCAtMzUsNyAr
MzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwogY2xhc3MgSW5zcGVj
dG9yQXJyYXk7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvck9iamVjdDsKIGNs
YXNzIEluc3BlY3RvclZhbHVlOwpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOwogY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKTsKKyAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoSW5z
cGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JGcm9udGVuZCopOwogICAgIH5JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSB7IH0KIAogICAgIC8vIEJhY2tlbmQgdG8gRnJvbnRlbmQKQEAgLTU5
LDcgKzU5LDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWls
ZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvTGlzdCYpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdl
bnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50LmNwcAppbmRleCAwMjNkYzQ5Li43ZWU3ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAKQEAg
LTM1LDcgKzM1LDcgQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKSAmJiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yU3RhdGUuaCIKQEAgLTYxLDggKzYxLDggQEAgY29uc3QgaW50
IGRvbUJyZWFrcG9pbnREZXJpdmVkVHlwZVNoaWZ0ID0gMTY7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCi0gICAg
OiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKK0luc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3Rv
ckFnZW50KQogICAgICwgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKGZhbHNlKQogewog
fQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpp
bnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IEtVUkwmIHVybCkKICAgICBtX1hIUkJyZWFrcG9pbnRz
LmNsZWFyKCk7CiAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gZmFsc2U7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1faW5zcGVjdG9y
Q29udHJvbGxlci0+c3RhdGUoKS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJl
YWtwb2ludHMpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFsbEJyZWFrcG9pbnRzID0g
bV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93
c2VyQnJlYWtwb2ludHMpOwogICAgIEtVUkwgdXJsQ29weSA9IHVybDsKICAgICB1cmxDb3B5LnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnJl
YWtwb2ludHMgPSBhbGxCcmVha3BvaW50cy0+Z2V0QXJyYXkodXJsQ29weSk7CkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVzdG9yZVN0aWNr
eUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3IKICAgICAgICAgaWYgKCFjb25kaXRpb24t
PmdldFN0cmluZygiZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGV2ZW50TmFtZSk7Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09IGphdmFTY3JpcHRCcmVha3BvaW50VHlwZSAmJiBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmRlYnVnZ2VyQWdlbnQoKSkgeworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBqYXZh
U2NyaXB0QnJlYWtwb2ludFR5cGUgJiYgbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgp
KSB7CiAgICAgICAgIFN0cmluZyB1cmw7CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJp
bmcoInVybCIsICZ1cmwpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIyLDcgKzEyMiw3IEBA
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJlc3RvcmVTdGlja3lCcmVha3Bv
aW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yCiAgICAgICAgIFN0cmluZyBqYXZhU2NyaXB0Q29uZGl0
aW9uOwogICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmamF2
YVNjcmlwdENvbmRpdGlvbikpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpLT5zZXRTdGlja3lCcmVha3BvaW50KHVybCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVOdW1iZXIpLCBqYXZhU2NyaXB0Q29uZGl0aW9uLCBl
bmFibGVkKTsKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpLT5zZXRT
dGlja3lCcmVha3BvaW50KHVybCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxpbmVOdW1iZXIpLCBq
YXZhU2NyaXB0Q29uZGl0aW9uLCBlbmFibGVkKTsKICAgICB9IGVsc2UgaWYgKHR5cGUgPT0geGhy
QnJlYWtwb2ludFR5cGUpIHsKICAgICAgICAgaWYgKCFlbmFibGVkKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQog
ewotICAgIE5vZGUqIG5vZGUgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPm5v
ZGVGb3JJZChub2RlSWQpOworICAgIE5vZGUqIG5vZGUgPSBtX2luc3BlY3RvckFnZW50LT5kb21B
Z2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKIAogdm9pZCBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChsb25nIG5vZGVJ
ZCwgbG9uZyB0eXBlKQogewotICAgIE5vZGUqIG5vZGUgPSBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmRvbUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOworICAgIE5vZGUqIG5vZGUgPSBtX2luc3Bl
Y3RvckFnZW50LT5kb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSW5zcGVjdG9yQnJv
d3NlckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcg
dHlwZSkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERP
TU5vZGUoTm9kZSosIE5vZGUqIHBhcmVudCkKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCk7
CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9y
QWdlbnQtPmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUqLCBOb2RlKiBwYXJlbnQpCiAKIHZvaWQg
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckFnZW50KCk7
CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NCw3ICsy
NDQsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9N
Tm9kZShOb2RlKiBub2RlKQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3
aWxsTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogewotICAgIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVnZ2Vy
QWdlbnQoKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0gbV9p
bnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpOwogICAgIGlmICghZGVidWdnZXJBZ2VudCkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjQsNyArMjY0LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudChOb2RlKiB0YXJnZXQsIGxv
bmcgYnIKICAgICBpZiAoKDEgPDwgYnJlYWtwb2ludFR5cGUpICYgaW5oZXJpdGFibGVET01CcmVh
a3BvaW50VHlwZXNNYXNrKSB7CiAgICAgICAgIC8vIEZvciBpbmhlcml0YWJsZSBicmVha3BvaW50
IHR5cGVzLCB0YXJnZXQgbm9kZSBpc24ndCBhbHdheXMgdGhlIHNhbWUgYXMgdGhlIG5vZGUgdGhh
dCBvd25zIGEgYnJlYWtwb2ludC4KICAgICAgICAgLy8gVGFyZ2V0IG5vZGUgbWF5IGJlIHVua25v
d24gdG8gZnJvbnRlbmQsIHNvIHdlIG5lZWQgdG8gcHVzaCBpdCBmaXJzdC4KLSAgICAgICAgbG9u
ZyB0YXJnZXROb2RlSWQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQodGFyZ2V0KTsKKyAgICAgICAgbG9uZyB0YXJnZXROb2RlSWQgPSBt
X2luc3BlY3RvckFnZW50LT5kb21BZ2VudCgpLT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHRhcmdl
dCk7CiAgICAgICAgIEFTU0VSVCh0YXJnZXROb2RlSWQpOwogICAgICAgICBkZXNjcmlwdGlvbi0+
c2V0TnVtYmVyKCJ0YXJnZXROb2RlSWQiLCB0YXJnZXROb2RlSWQpOwogCkBAIC0yODEsNyArMjgx
LDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6ZGVzY3JpcHRpb25Gb3JE
T01FdmVudChOb2RlKiB0YXJnZXQsIGxvbmcgYnIKICAgICAgICAgICAgIGRlc2NyaXB0aW9uLT5z
ZXRCb29sZWFuKCJpbnNlcnRpb24iLCBpbnNlcnRpb24pOwogICAgIH0KIAotICAgIGxvbmcgYnJl
YWtwb2ludE93bmVyTm9kZUlkID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5w
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGJyZWFrcG9pbnRPd25lcik7CisgICAgbG9uZyBicmVha3Bv
aW50T3duZXJOb2RlSWQgPSBtX2luc3BlY3RvckFnZW50LT5kb21BZ2VudCgpLT5wdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGJyZWFrcG9pbnRPd25lcik7CiAgICAgQVNTRVJUKGJyZWFrcG9pbnRPd25l
ck5vZGVJZCk7CiAgICAgZGVzY3JpcHRpb24tPnNldE51bWJlcigibm9kZUlkIiwgYnJlYWtwb2lu
dE93bmVyTm9kZUlkKTsKICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0eXBlIiwgYnJlYWtw
b2ludFR5cGUpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiBub2RlLCB1aW50MzJfCiAK
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnBhdXNlT25OYXRpdmVFdmVudElm
TmVlZGVkKGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFt
ZSwgYm9vbCBzeW5jaHJvbm91cykKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCk7CisgICAg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9yQWdlbnQt
PmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OnJlbW92ZVhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpCiAKIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OndpbGxTZW5kWE1MSHR0cFJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckFn
ZW50KCk7CiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50LmgKaW5kZXggMGZmYTg1Yy4uNmM4OTNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmgKQEAgLTQ0
LDcgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKLWNsYXNz
IEluc3BlY3RvckNvbnRyb2xsZXI7CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3Bl
Y3Rvck9iamVjdDsKIGNsYXNzIEtVUkw7CiBjbGFzcyBOb2RlOwpAQCAtNTIsOSArNTIsOSBAQCBj
bGFzcyBOb2RlOwogY2xhc3MgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KTsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4g
Y3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNw
ZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudChpbnNwZWN0b3JBZ2VudCkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50KCk7CkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHBhdXNlT25OYXRpdmVFdmVudElmTmVlZGVkKGNvbnN0IFN0cmluZyYgY2F0ZWdvcnlUeXBlLCBj
b25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgYm9vbCBzeW5jaHJvbm91cyk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciopOwor
ICAgIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50Kik7CiAKICAg
ICB2b2lkIHJlc3RvcmVTdGlja3lCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBicmVha3BvaW50KTsKIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFz
QnJlYWtwb2ludChOb2RlKiwgbG9uZyB0eXBlKTsKICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygp
OwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAg
IEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIEhhc2hNYXA8Tm9kZSosIHVp
bnQzMl90PiBtX2RvbUJyZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2V2ZW50TGlz
dGVuZXJCcmVha3BvaW50czsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9YSFJCcmVha3BvaW50czsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5j
cHAKaW5kZXggMmM4MzdmMy4uNzY2MzhjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNs
dWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIKICNpbmNsdWRlICJJ
bmplY3RlZFNjcmlwdEhvc3QuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yU2V0
dGluZ3MuaCIKQEAgLTUwLDggKzUwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heGltdW1Db25zb2xlTWVzc2FnZXMgPSAxMDAwOwogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGV4cGlyZUNvbnNvbGVNZXNzYWdlc1N0ZXAgPSAxMDA7CiAKLUluc3BlY3RvckNv
bnNvbGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIpCi0gICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVjdG9y
Q29udHJvbGxlcikKK0luc3BlY3RvckNvbnNvbGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKKyAgICA6IG1faW5zcGVjdG9yQWdlbnQo
aW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX3ByZXZpb3VzTWVz
c2FnZSgwKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQpAQCAtNjAsNyAr
NjAsNyBAQCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6Okluc3BlY3RvckNvbnNvbGVBZ2VudChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cgogCiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
On5JbnNwZWN0b3JDb25zb2xlQWdlbnQoKQogewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlciA9
IDA7CisgICAgbV9pbnNwZWN0b3JBZ2VudCA9IDA7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpzZXRDb25zb2xlTWVzc2FnZXNFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3
U3RhdGUpCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVh
ckNvbnNvbGVNZXNzYWdlcygpCiAgICAgbV9jb25zb2xlTWVzc2FnZXMuY2xlYXIoKTsKICAgICBt
X2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKICAgICBtX3ByZXZpb3VzTWVzc2FnZSA9
IDA7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+cmVs
ZWFzZVdyYXBwZXJPYmplY3RHcm91cCgwIC8qIHJlbGVhc2UgdGhlIGdyb3VwIGluIGFsbCBzY3Jp
cHRzICovLCAiY29uc29sZSIpOwotICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQg
PSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkpCisgICAgbV9pbnNwZWN0b3JBZ2Vu
dC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoMCAvKiBy
ZWxlYXNlIHRoZSBncm91cCBpbiBhbGwgc2NyaXB0cyAqLywgImNvbnNvbGUiKTsKKyAgICBpZiAo
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZG9tQWdlbnQo
KSkKICAgICAgICAgZG9tQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAgICAgaWYgKG1f
ZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmNvbnNvbGVNZXNzYWdlc0NsZWFyZWQoKTsK
QEAgLTk1LDE0ICs5NSwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0RnJvbnRl
bmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZVR5
cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBhc3NS
ZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2spCiB7Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJs
ZWQoKSkKKyAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGFkZENvbnNvbGVNZXNzYWdlKG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIHR5
cGUsIGxldmVsLCBtZXNzYWdlLCBhcmd1bWVudHMsIGNhbGxTdGFjaykpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZVR5cGUgdHlwZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCiB7
Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZWQoKSkKKyAgICBpZiAoIW1f
aW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFkZENvbnNv
bGVNZXNzYWdlKG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIHR5cGUsIGxldmVsLCBtZXNzYWdl
LCBsaW5lTnVtYmVyLCBzb3VyY2VJRCkpOwogfQpAQCAtMTYzLDE1ICsxNjMsMTUgQEAgdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50KFBhc3NSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBh
cmd1bWVudHMsIFBhc3NSZWYKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc291cmNl
UmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBzZW5kVVJMLCB1bnNpZ25lZCBzZW5kTGluZU51bWJlcikKIHsKLSAgICBpZiAoIW1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlci0+
c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUikpCisgICAg
aWYgKG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6
Om1vbml0b3JpbmdYSFIpKQogICAgICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgIlhIUiBmaW5pc2hlZCBsb2Fk
aW5nOiBcIiIgKyB1cmwgKyAiXCIuIiwgc2VuZExpbmVOdW1iZXIsIHNlbmRVUkwpOwogfQogCiB2
b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZWQoKSkKKyAgICBpZiAoIW1faW5zcGVj
dG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHJlc3BvbnNl
Lmh0dHBTdGF0dXNDb2RlKCkgPj0gNDAwKSB7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb25zb2xlQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFIKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpZEZhaWxMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7Ci0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXItPmVuYWJsZWQoKSkKKyAgICBpZiAo
IW1faW5zcGVjdG9yQWdlbnQtPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nIG1lc3NhZ2UgPSAiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UiOwpAQCAtMTkzLDQwICsxOTMs
NDAgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3UKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OnNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnN0YXRlKCktPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6Om1vbml0
b3JpbmdYSFIsIGVuYWJsZWQpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2V0dGluZ3Mo
KS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6TW9uaXRvcmluZ1hIUkVuYWJsZWQsIGVu
YWJsZWQpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldEJvb2xlYW4oSW5zcGVj
dG9yU3RhdGU6Om1vbml0b3JpbmdYSFIsIGVuYWJsZWQpOworICAgIG1faW5zcGVjdG9yQWdlbnQt
PnNldHRpbmdzKCktPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6Ok1vbml0b3JpbmdYSFJF
bmFibGVkLCBlbmFibGVkKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVu
ZC0+bW9uaXRvcmluZ1hIUlN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQog
ewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCwgZW5hYmxlZCk7CisgICAgbV9pbnNwZWN0
b3JBZ2VudC0+c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6Y29uc29sZU1lc3Nh
Z2VzRW5hYmxlZCwgZW5hYmxlZCk7CiAgICAgaWYgKCFlbmFibGVkIHx8ICFtX2Zyb250ZW5kKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kLT5tb25pdG9yaW5nWEhSU3RhdGVDaGFu
Z2VkKG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6bW9uaXRvcmluZ1hIUikpOworICAgIG1fZnJvbnRlbmQtPm1vbml0b3JpbmdYSFJTdGF0
ZUNoYW5nZWQobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6bW9uaXRvcmluZ1hIUikpOwogICAgIGlmIChtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNv
dW50KQogICAgICAgICBtX2Zyb250ZW5kLT51cGRhdGVDb25zb2xlTWVzc2FnZUV4cGlyZWRDb3Vu
dChtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KTsKICAgICB1bnNpZ25lZCBtZXNzYWdlQ291
bnQgPSBtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1lc3NhZ2VDb3VudDsgKytpKQotICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tpXS0+YWRk
VG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2Ny
aXB0SG9zdCgpKTsKKyAgICAgICAgbV9jb25zb2xlTWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQo
bV9mcm9udGVuZCwgbV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOwogfQog
CiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2UoUGFzc093blB0
cjxDb25zb2xlTWVzc2FnZT4gY29uc29sZU1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKG1faW5zcGVj
dG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKTsKKyAgICBBU1NFUlQobV9pbnNwZWN0b3JBZ2VudC0+
ZW5hYmxlZCgpKTsKICAgICBBU1NFUlRfQVJHKGNvbnNvbGVNZXNzYWdlLCBjb25zb2xlTWVzc2Fn
ZSk7CiAKICAgICBpZiAobV9wcmV2aW91c01lc3NhZ2UgJiYgbV9wcmV2aW91c01lc3NhZ2UtPmlz
RXF1YWwoY29uc29sZU1lc3NhZ2UuZ2V0KCkpKSB7CiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdl
LT5pbmNyZW1lbnRDb3VudCgpOwotICAgICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyLT5z
dGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVk
KSAmJiBtX2Zyb250ZW5kKQorICAgICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+
Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6Y29uc29sZU1lc3NhZ2VzRW5hYmxlZCkgJiYgbV9m
cm9udGVuZCkKICAgICAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT51cGRhdGVSZXBlYXRDb3Vu
dEluQ29uc29sZShtX2Zyb250ZW5kKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3ByZXZpb3Vz
TWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlLmdldCgpOwogICAgICAgICBtX2NvbnNvbGVNZXNzYWdl
cy5hcHBlbmQoY29uc29sZU1lc3NhZ2UpOwotICAgICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9s
bGVyLT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNF
bmFibGVkKSAmJiBtX2Zyb250ZW5kKQotICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFk
ZFRvRnJvbnRlbmQobV9mcm9udGVuZCwgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmplY3RlZFNj
cmlwdEhvc3QoKSk7CisgICAgICAgIGlmIChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkKSAmJiBtX2Zyb250
ZW5kKQorICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvRnJvbnRlbmQobV9mcm9u
dGVuZCwgbV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOwogICAgIH0KIAog
ICAgIGlmICghbV9mcm9udGVuZCAmJiBtX2NvbnNvbGVNZXNzYWdlcy5zaXplKCkgPj0gbWF4aW11
bUNvbnNvbGVNZXNzYWdlcykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnNvbGVBZ2VudC5oCmluZGV4IDQxMWY3MDkuLjEwZmZiMDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTM3LDcgKzM3
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKIGNsYXNz
IENvbnNvbGVNZXNzYWdlOwotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3Bl
Y3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JTdGF0
ZTsKIGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFNjcmlwdFBy
b2ZpbGU7CiBjbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNvbnNvbGVBZ2VudCk7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ29u
c29sZUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqKTsKKyAgICBJbnNwZWN0b3JDb25zb2xlQWdl
bnQoSW5zcGVjdG9yQWdlbnQqKTsKICAgICB+SW5zcGVjdG9yQ29uc29sZUFnZW50KCk7CiAKICAg
ICB2b2lkIHNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdT
dGF0ZSk7CkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRDb25zb2xlTWVz
c2FnZXNFbmFibGVkKGJvb2wpOwogICAgIHZvaWQgYWRkQ29uc29sZU1lc3NhZ2UoUGFzc093blB0
cjxDb25zb2xlTWVzc2FnZT4pOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0
b3JDb250cm9sbGVyOworICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAg
IEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwogICAgIENvbnNvbGVNZXNzYWdlKiBtX3By
ZXZpb3VzTWVzc2FnZTsKICAgICBWZWN0b3I8T3duUHRyPENvbnNvbGVNZXNzYWdlPiA+IG1fY29u
c29sZU1lc3NhZ2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCmluZGV4IGY1NzYxMGYuLmZiODQwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTEsMzAgKzEsMzEgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IE1hdHQgTGlsZWsgPHdl
YmtpdEBtYXR0bGlsZWsuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CkBAIC0zMiwxMzc3ICszMywxNSBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAotI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
LSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJDb29r
aWVKYXIuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJET01XcmFwcGVyV29y
bGQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
Ci0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZy
YW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKLSNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0SG9zdC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0
b3JDU1NBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgotI2luY2x1ZGUgIklu
c3BlY3RvckNvbnNvbGVBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yRGF0YWJhc2VSZXNvdXJjZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCIKLSNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kQ2xpZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclJl
c291cmNlQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIKLSNpbmNs
dWRlICJJbnNwZWN0b3JTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkluc3BlY3RvclN0YXRlLmgiCi0j
aW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgotI2luY2x1ZGUgIkluc3BlY3RvcldvcmtlclJlc291cmNlLmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIu
aCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1
ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKLSNp
bmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIK
LSNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKLSNpbmNsdWRlICJTY3JpcHRPYmplY3Qu
aCIKLSNpbmNsdWRlICJTY3JpcHRQcm9maWxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIu
aCIKLSNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiU2NyaXB0U3RhdGUu
aCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0j
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0jaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgIlVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmgiCi0jaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIgotI2VuZGlmCi0KLSNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0jaW5jbHVkZSAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmgi
Ci0jaW5jbHVkZSAiU3RvcmFnZS5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCi0jZW5kaWYK
LQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0jaW5jbHVkZSAiSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZ
U1RFTSkKLSNpbmNsdWRlICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIKLSNlbmRpZgotCi11
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIq
IGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOwot
Y29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6Q29uc29sZVBhbmVsID0gImNv
bnNvbGUiOwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1Bh
bmVsID0gInNjcmlwdHMiOwotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6
UHJvZmlsZXNQYW5lbCA9ICJwcm9maWxlcyI7Ci0KLUluc3BlY3RvckNvbnRyb2xsZXI6Okluc3Bl
Y3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX2luc3BlY3RlZFBhZ2UocGFnZSkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1f
b3BlbmluZ0Zyb250ZW5kKGZhbHNlKQotICAgICwgbV9jc3NBZ2VudChuZXcgSW5zcGVjdG9yQ1NT
QWdlbnQoKSkKLSAgICAsIG1fc3RhdGUobmV3IEluc3BlY3RvclN0YXRlKGNsaWVudCkpCi0gICAg
LCBtX2luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKG5ldyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcih0aGlzKSkKLSAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVkU2NyaXB0SG9z
dDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9jb25zb2xlQWdlbnQobmV3IEluc3BlY3RvckNvbnNv
bGVBZ2VudCh0aGlzKSkKLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICAsIG1f
YXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKHRoaXMpKQotI2VuZGlmCi17Ci0gICAgQVNTRVJU
X0FSRyhwYWdlLCBwYWdlKTsKLSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKLX0KLQot
SW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3BlY3RvckNvbnRyb2xsZXIoKQotewotICAgIC8vIFRo
ZXNlIHNob3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBpbiBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCku
Ci0gICAgQVNTRVJUKCFtX2NsaWVudCk7Ci0gICAgQVNTRVJUKCFtX2luc3BlY3RlZFBhZ2UpOwot
ICAgIEFTU0VSVCghbV9oaWdobGlnaHRlZE5vZGUpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQotewotICAgIGlmIChtX2Zyb250ZW5kKQot
ICAgICAgICBtX2Zyb250ZW5kLT5kaXNjb25uZWN0RnJvbUJhY2tlbmQoKTsKLQotICAgIGhpZGVI
aWdobGlnaHQoKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIG1fZGVi
dWdnZXJBZ2VudC5jbGVhcigpOwotICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuY2xlYXIoKTsK
LSNlbmRpZgotCi0gICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0gICAgbV9pbnNwZWN0ZWRQ
YWdlID0gMDsKLQotICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7Ci0gICAgbV9p
bmplY3RlZFNjcmlwdEhvc3QtPmRpc2Nvbm5lY3RDb250cm9sbGVyKCk7Ci0KLSAgICBtX2NsaWVu
dC0+aW5zcGVjdG9yRGVzdHJveWVkKCk7Ci0gICAgbV9jbGllbnQgPSAwOwotfQotCi1ib29sIElu
c3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZWQoKSBjb25zdAotewotICAgIGlmICghbV9pbnNwZWN0
ZWRQYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1faW5zcGVjdGVkUGFn
ZS0+c2V0dGluZ3MoKS0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwotfQotCi1ib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6Omluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCkKLXsKLSAgICByZXR1cm4g
bV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6SW5zcGVjdG9yU3RhcnRz
QXR0YWNoZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvclN0
YXJ0c0F0dGFjaGVkKGJvb2wgYXR0YWNoZWQpCi17Ci0gICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVh
bihJbnNwZWN0b3JTZXR0aW5nczo6SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQsIGF0dGFjaGVkKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdo
dChsb25nIGhlaWdodCkKLXsKLSAgICBtX3NldHRpbmdzLT5zZXRMb25nKEluc3BlY3RvclNldHRp
bmdzOjpJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCwgaGVpZ2h0KTsKLX0KLQotbG9uZyBJbnNwZWN0
b3JDb250cm9sbGVyOjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fc2V0dGluZ3MtPmdldExvbmcoSW5zcGVjdG9yU2V0dGluZ3M6Okluc3BlY3RvckF0dGFj
aGVkSGVpZ2h0KTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZWFyY2hpbmdGb3JO
b2RlSW5QYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNw
ZWN0b3JTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3Bl
Y3RvclN0YXRlQ29va2llKQotewotICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29v
a2llKGluc3BlY3RvclN0YXRlQ29va2llKTsKLQotICAgIGlmICghbV9mcm9udGVuZCkgewotICAg
ICAgICBjb25uZWN0RnJvbnRlbmQoKTsKLSAgICAgICAgbV9mcm9udGVuZC0+ZnJvbnRlbmRSZXVz
ZWQoKTsKLSAgICAgICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRV
UkwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVj
dGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkpOwotICAgICAgICBwdXNoRGF0YUNvbGxl
Y3RlZE9mZmxpbmUoKTsKLSAgICB9Ci0KLSAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50OjpyZXN0b3JlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9m
cm9udGVuZC5nZXQoKSk7Ci0KLSAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQpKQotICAgICAgICBzdGFydFRpbWVsaW5lUHJv
ZmlsZXIoKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHJlc3RvcmVE
ZWJ1Z2dlcigpOwotICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVSZXNldEFnZW50
KTsKLSAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRp
YXRlZFByb2ZpbGluZykpCi0gICAgICAgIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpOwot
I2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdChOb2RlKiBub2Rl
KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaG93KCk7
Ci0KLSAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9k
ZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFKQotICAgICAgICBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwotICAgIG1fbm9kZVRvRm9jdXMgPSBub2RlOwotCi0gICAgaWYgKCFt
X2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb2N1c05vZGUoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmb2N1c05vZGUoKQotewotICAgIGlmICghZW5hYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9mcm9udGVuZCk7Ci0gICAgQVNTRVJU
KG1fbm9kZVRvRm9jdXMpOwotCi0gICAgbG9uZyBpZCA9IG1fZG9tQWdlbnQtPnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobV9ub2RlVG9Gb2N1cy5nZXQoKSk7Ci0gICAgbV9mcm9udGVuZC0+dXBkYXRl
Rm9jdXNlZE5vZGUoaWQpOwotICAgIG1fbm9kZVRvRm9jdXMgPSAwOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodChOb2RlKiBub2RlKQotewotICAgIGlmICghZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUX0FSRyhub2RlLCBub2RlKTsKLSAgICBt
X2hpZ2hsaWdodGVkTm9kZSA9IG5vZGU7Ci0gICAgbV9jbGllbnQtPmhpZ2hsaWdodChub2RlKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRET01Ob2RlKGxvbmcgbm9k
ZUlkKQotewotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIGlmIChtX2RvbUFnZW50ICYmIChub2Rl
ID0gbV9kb21BZ2VudC0+bm9kZUZvcklkKG5vZGVJZCkpKQotICAgICAgICBoaWdobGlnaHQobm9k
ZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0RnJhbWUodW5zaWdu
ZWQgbG9uZyBmcmFtZUlkKQotewotICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX2luc3BlY3RlZFBh
Z2UtPm1haW5GcmFtZSgpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lOyBmcmFt
ZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobWFpbkZyYW1lKSkgewotICAg
ICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZyYW1lKSA9PSBmcmFtZUlkICYm
IGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewotICAgICAgICAgICAgaGlnaGxpZ2h0KGZyYW1lLT5v
d25lckVsZW1lbnQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlkZUhpZ2hsaWdodCgpCi17Ci0gICAgaWYg
KCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZ2hsaWdodGVkTm9kZSA9IDA7
Ci0gICAgbV9jbGllbnQtPmhpZGVIaWdobGlnaHQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIHVuc2lnbmVkKQotewotICAgIGlmICghZW5hYmxlZCgpIHx8ICFzZWFyY2hpbmdGb3JOb2Rl
SW5QYWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIG5vZGUgPSByZXN1bHQuaW5u
ZXJOb2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpU
RVhUX05PREUpCi0gICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG5v
ZGUpCi0gICAgICAgIGhpZ2hsaWdodChub2RlKTsKLX0KLQotYm9vbCBJbnNwZWN0b3JDb250cm9s
bGVyOjpoYW5kbGVNb3VzZVByZXNzKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhc2VhcmNo
aW5nRm9yTm9kZUluUGFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9o
aWdobGlnaHRlZE5vZGUpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2hpZ2hsaWdo
dGVkTm9kZTsKLSAgICAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShmYWxzZSk7Ci0gICAgICAgIGlu
c3BlY3Qobm9kZS5nZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCkKLXsKLSAgICBBU1NFUlQoIW1faW5zcGVj
dG9yRnJvbnRlbmRDbGllbnQpOwotICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgPSBjbGll
bnQ7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJ
bldvcmxkKEZyYW1lKiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKLXsKLSAgICBpZiAo
d29ybGQgIT0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIElmIHRoZSBwYWdlIGlzIHN1cHBvc2VkIHRvIHNlcnZlIGFzIEluc3BlY3RvckZyb250ZW5k
IG5vdGlmeSBpbnNwZXRvciBmcm9udGVuZAotICAgIC8vIGNsaWVudCB0aGF0IGl0J3MgY2xlYXJl
ZCBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGV4cG9zZSBpbnNwZWN0b3IgYmluZGluZ3MuCi0gICAg
aWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQgJiYgZnJhbWUgPT0gbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKSkKLSAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudC0+d2luZG93
T2JqZWN0Q2xlYXJlZCgpOwotCi0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBpZiAobV9m
cm9udGVuZCAmJiBmcmFtZSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAgICAg
ICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmRpc2NhcmRJbmplY3RlZFNjcmlwdHMoKTsKLSAg
ICAgICAgaWYgKG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShmcmFtZSk7
Ci0gICAgICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1fc2NyaXB0
c1RvRXZhbHVhdGVPbkxvYWQuYmVnaW4oKTsKLSAgICAgICAgICAgICAgICAgaXQgIT0gbV9zY3Jp
cHRzVG9FdmFsdWF0ZU9uTG9hZC5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgIG1faW5q
ZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RTY3JpcHQoKml0LCBzY3JpcHRTdGF0ZSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2luc3BlY3RvckV4dGVuc2lvbkFQ
SS5pc0VtcHR5KCkpCi0gICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5pbmplY3RTY3JpcHQo
bV9pbnNwZWN0b3JFeHRlbnNpb25BUEksIG1haW5Xb3JsZFNjcmlwdFN0YXRlKGZyYW1lKSk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVu
YWJsZWQpCi17Ci0gICAgaWYgKHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSA9PSBlbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6
c2VhcmNoaW5nRm9yTm9kZSwgZW5hYmxlZCk7Ci0gICAgaWYgKCFlbmFibGVkKQotICAgICAgICBo
aWRlSGlnaGxpZ2h0KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0U2VhcmNo
aW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQotewotICAgICpuZXdTdGF0
ZSA9IGVuYWJsZWQ7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlbmFibGVkKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQotewotICAgIG1fb3Blbmlu
Z0Zyb250ZW5kID0gZmFsc2U7Ci0gICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsK
LSAgICBtX2Zyb250ZW5kID0gbmV3IEluc3BlY3RvckZyb250ZW5kKG1fY2xpZW50KTsKLSAgICBt
X2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9z
dC5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7Ci0gICAgbV9ydW50aW1lQWdlbnQgPSBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0SG9zdC5nZXQoKSk7Ci0gICAg
bV9jc3NBZ2VudC0+c2V0RE9NQWdlbnQobV9kb21BZ2VudC5nZXQoKSk7Ci0KLSNpZiBFTkFCTEUo
REFUQUJBU0UpCi0gICAgbV9kYXRhYmFzZUFnZW50ID0gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
Y3JlYXRlKCZtX2RhdGFiYXNlUmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIG1fZG9tU3RvcmFnZUFnZW50ID0gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpjcmVhdGUoJm1fZG9tU3RvcmFnZVJlc291cmNlcywgbV9mcm9u
dGVuZC5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAg
IG1fdGltZWxpbmVBZ2VudC0+cmVzZXRGcm9udGVuZFByb3h5T2JqZWN0KG1fZnJvbnRlbmQuZ2V0
KCkpOwotCi0gICAgbV9jb25zb2xlQWdlbnQtPnNldEZyb250ZW5kKG1fZnJvbnRlbmQuZ2V0KCkp
OwotCi0gICAgLy8gSW5pdGlhbGl6ZSBXZWIgSW5zcGVjdG9yIHRpdGxlLgotICAgIG1fZnJvbnRl
bmQtPmluc3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCkuc3RyaW5nKCkpOwotCi0jaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBtX2FwcGxpY2F0aW9uQ2FjaGVB
Z2VudCA9IG5ldyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhpcywgbV9mcm9udGVu
ZC5nZXQoKSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICBtX2ZpbGVT
eXN0ZW1BZ2VudCA9IEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6Y3JlYXRlKHRoaXMsIG1fZnJv
bnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKCFJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246Omhhc0Zyb250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpzZXRDYXB0
dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKHRydWUpOwotICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZnJvbnRlbmRDcmVhdGVkKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c2hvdygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX29wZW5pbmdGcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOwotICAgIGVs
c2UgewotICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7Ci0gICAgICAgIG1fY2xpZW50
LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnNob3dQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsKQotewotICAgIGlmICgh
ZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaG93KCk7Ci0KLSAgICBpZiAoIW1f
ZnJvbnRlbmQpIHsKLSAgICAgICAgbV9zaG93QWZ0ZXJWaXNpYmxlID0gcGFuZWw7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgpCi17Ci0gICAgaWYgKCFtX2Zyb250ZW5k
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9mcm9udGVuZC0+ZGlzY29ubmVjdEZyb21CYWNrZW5k
KCk7Ci0gICAgZGlzY29ubmVjdEZyb250ZW5kKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkKLXsKLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fZnJvbnRlbmQuY2xlYXIoKTsKLQotICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZnJvbnRlbmREZWxldGVkKCk7Ci0gICAgaWYgKCFJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKQotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjpz
ZXRDYXB0dXJlQ2FsbFN0YWNrRm9yVW5jYXVnaHRFeGNlcHRpb25zKGZhbHNlKTsKLQotI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIC8vIElmIHRoZSB3aW5kb3cgaXMgYmVpbmcg
Y2xvc2VkIHdpdGggdGhlIGRlYnVnZ2VyIGVuYWJsZWQsCi0gICAgLy8gcmVtZW1iZXIgdGhpcyBz
dGF0ZSB0byByZS1lbmFibGUgZGVidWdnZXIgb24gdGhlIG5leHQgd2luZG93Ci0gICAgLy8gb3Bl
bmluZy4KLSAgICBib29sIGRlYnVnZ2VyV2FzRW5hYmxlZCA9IGRlYnVnZ2VyRW5hYmxlZCgpOwot
ICAgIGRpc2FibGVEZWJ1Z2dlcigpOwotICAgIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBk
ZWJ1Z2dlcldhc0VuYWJsZWQ7Ci0jZW5kaWYKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZhbHNl
KTsKLSAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKLSAgICBzdG9wVGltZWxpbmVQcm9maWxlcigp
OwotCi0gICAgaGlkZUhpZ2hsaWdodCgpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZCgwKTsKLSAgICBtX3Byb2ZpbGVy
QWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgbV9j
b25zb2xlQWdlbnQtPnNldEZyb250ZW5kKDApOwotCi0gICAgcmVsZWFzZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKTsKLSAgICBtX3RpbWVsaW5lQWdlbnQuY2xlYXIoKTsKLSAgICBtX2V4dHJhSGVh
ZGVycy5jbGVhcigpOwotfQotCi1JbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JDb250
cm9sbGVyOjpyZXNvdXJjZUFnZW50KCkKLXsKLSAgICBpZiAoIW1fcmVzb3VyY2VBZ2VudCAmJiBt
X2Zyb250ZW5kKQotICAgICAgICBtX3Jlc291cmNlQWdlbnQgPSBJbnNwZWN0b3JSZXNvdXJjZUFn
ZW50OjpjcmVhdGUobV9pbnNwZWN0ZWRQYWdlLCBtX3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kLmdl
dCgpKTsKLSAgICByZXR1cm4gbV9yZXNvdXJjZUFnZW50LmdldCgpOwotfQotCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKLXsKLSAgICBt
X3Jlc291cmNlQWdlbnQuY2xlYXIoKTsKLSAgICBtX3J1bnRpbWVBZ2VudC5jbGVhcigpOwotCi0g
ICAgLy8gVGhpcyBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byBtX2RvbUFnZW50IGRlc3RydWN0
aW9uLgotICAgIG1fY3NzQWdlbnQtPnNldERPTUFnZW50KDApOwotCi0gICAgLy8gbV9kb21BZ2Vu
dCBpcyBSZWZQdHIuIFJlbW92ZSBET00gbGlzdGVuZXJzIGZpcnN0IHRvIGVuc3VyZSB0aGF0IHRo
ZXJlIGFyZQotICAgIC8vIG5vIHJlZmVyZW5jZXMgdG8gdGhlIERPTSBhZ2VudCBmcm9tIHRoZSBE
T00gdHJlZS4KLSAgICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgbV9kb21BZ2VudC0+cmVzZXQo
KTsKLSAgICBtX2RvbUFnZW50LmNsZWFyKCk7Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAg
aWYgKG1fZGF0YWJhc2VBZ2VudCkKLSAgICAgICAgbV9kYXRhYmFzZUFnZW50LT5jbGVhckZyb250
ZW5kKCk7Ci0gICAgbV9kYXRhYmFzZUFnZW50LmNsZWFyKCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJM
RShET01fU1RPUkFHRSkKLSAgICBtX2RvbVN0b3JhZ2VBZ2VudC5jbGVhcigpOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIG1fYXBwbGljYXRpb25D
YWNoZUFnZW50LmNsZWFyKCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAg
ICBpZiAobV9maWxlU3lzdGVtQWdlbnQpCi0gICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LT5zdG9w
KCk7IAotICAgICAgICBtX2ZpbGVTeXN0ZW1BZ2VudC5jbGVhcigpOwotI2VuZGlmCi19Ci0KLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKLXsKLSAgICBB
U1NFUlQobV9mcm9udGVuZCk7Ci0gICAgaWYgKCFtX2Zyb250ZW5kKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fc2hvd0FmdGVyVmlzaWJsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2hv
d1BhbmVsKG1fc2hvd0FmdGVyVmlzaWJsZSk7Ci0gICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9
ICIiOwotICAgIH0KLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmICht
X3Byb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKSkKLSAgICAgICAgbV9mcm9udGVuZC0+cHJvZmlsZXJX
YXNFbmFibGVkKCk7Ci0jZW5kaWYKLQotICAgIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpOwot
Ci0gICAgaWYgKG1fbm9kZVRvRm9jdXMpCi0gICAgICAgIGZvY3VzTm9kZSgpOwotCi0gICAgLy8g
RGlzcGF0Y2ggcGVuZGluZyBmcm9udGVuZCBjb21tYW5kcwotICAgIGZvciAoVmVjdG9yPHBhaXI8
bG9uZywgU3RyaW5nPiA+OjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1h
bmRzLmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmVuZCgpOyAr
K2l0KQotICAgICAgICBtX2Zyb250ZW5kLT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKCgqaXQp
LmZpcnN0LCAoKml0KS5zZWNvbmQpOwotICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRz
LmNsZWFyKCk7Ci0KLSAgICByZXN0b3JlRGVidWdnZXIoKTsKLSAgICByZXN0b3JlUHJvZmlsZXIo
UHJvZmlsZXJSZXN0b3JlTm9BY3Rpb24pOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpCi17Ci0gICAgbV9kb21BZ2VudC0+c2V0RG9jdW1l
bnQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7Ci0KLSNpZiBFTkFC
TEUoREFUQUJBU0UpCi0gICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNl
c0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChEYXRhYmFzZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9
IGRhdGFiYXNlc0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5k
LmdldCgpKTsKLSNlbmRpZgotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBET01TdG9yYWdl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3Vy
Y2VzLmVuZCgpOwotICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQg
PSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytp
dCkKLSAgICAgICAgaXQtPnNlY29uZC0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoV09SS0VSUykKLSAgICBX
b3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJzRW5kID0gbV93b3JrZXJzLmVuZCgpOwotICAgIGZv
ciAoV29ya2Vyc01hcDo6aXRlcmF0b3IgaXQgPSBtX3dvcmtlcnMuYmVnaW4oKTsgaXQgIT0gd29y
a2Vyc0VuZDsgKytpdCkgewotICAgICAgICBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSogd29ya2Vy
ID0gaXQtPnNlY29uZC5nZXQoKTsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29ya2Vy
KHdvcmtlci0+aWQoKSwgd29ya2VyLT51cmwoKSwgd29ya2VyLT5pc1NoYXJlZFdvcmtlcigpKTsK
LSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlRGVi
dWdnZXIoKQotewotICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKLSNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKLSAgICBpZiAoSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNEZWJ1Z2dlckFs
d2F5c0VuYWJsZWQoKSB8fCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duIHx8IG1fc2V0dGluZ3Mt
PmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OkRlYnVnZ2VyQWx3YXlzRW5hYmxlZCkpIHsK
LSAgICAgICAgZW5hYmxlRGVidWdnZXIoZmFsc2UpOwotICAgICAgICBtX2F0dGFjaERlYnVnZ2Vy
V2hlblNob3duID0gZmFsc2U7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6cmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBhY3Rpb24pCi17
Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmQpOwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgIG1fcHJvZmlsZXJBZ2VudC0+c2V0RnJvbnRlbmQobV9mcm9udGVuZC5nZXQoKSk7Ci0g
ICAgaWYgKCFTY3JpcHRQcm9maWxlcjo6aXNQcm9maWxlckFsd2F5c0VuYWJsZWQoKSAmJiBtX3Nl
dHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpQcm9maWxlckFsd2F5c0VuYWJs
ZWQpKQotICAgICAgICBlbmFibGVQcm9maWxlcigpOwotICAgIGlmIChhY3Rpb24gPT0gUHJvZmls
ZXJSZXN0b3JlUmVzZXRBZ2VudCkKLSAgICAgICAgbV9wcm9maWxlckFnZW50LT5yZXNldEZyb250
ZW5kUHJvZmlsZXMoKTsKLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnVu
YmluZEFsbFJlc291cmNlcygpCi17Ci0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIERhdGFiYXNl
UmVzb3VyY2VzTWFwOjppdGVyYXRvciBkYXRhYmFzZXNFbmQgPSBtX2RhdGFiYXNlUmVzb3VyY2Vz
LmVuZCgpOwotICAgIGZvciAoRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBkYXRhYmFzZXNFbmQ7ICsraXQpCi0gICAg
ICAgIGl0LT5zZWNvbmQtPnVuYmluZCgpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBt
X2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBk
b21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT51bmJpbmQoKTsKLSNlbmRp
ZgotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGltZWxpbmVBZ2VudC0+cmVz
ZXQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+
ZGlkQ29tbWl0TG9hZChsb2FkZXIpOwotICAgIAotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwotCi0gICAgaWYgKGxvYWRlci0+ZnJhbWUoKSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpKSB7Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICAgICAgbV9mcm9udGVuZC0+
aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKLQotICAgICAgICBt
X2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVjdGVkU2NyaXB0cygpOwotICAgICAgICBt
X2NvbnNvbGVBZ2VudC0+cmVzZXQoKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQotICAgICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7Ci0gICAgICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPmNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKLSAgICAgICAgICAgIGlmIChtX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50KQotICAgICAgICAgICAgICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQt
Pmluc3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJMKCkpOwotICAgICAgICB9Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQotICAgICAgICBt
X3Byb2ZpbGVyQWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKHRydWUpOwotICAgICAg
ICBtX3Byb2ZpbGVyQWdlbnQtPnJlc2V0U3RhdGUoKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIHVu
YmluZEFsbFJlc291cmNlcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBkYXRhYmFzZSBhbmQgRE9N
IHN0b3JhZ2UKLSAgICAgICAgLy8gcmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgaXQgaGFz
IGEgY2hhbmNlIHRvIHVuYmluZCB0aGVtLgotICAgICAgICB1bmJpbmRBbGxSZXNvdXJjZXMoKTsK
LQotICAgICAgICBpZiAobV9mcm9udGVuZCkgewotICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVz
ZXQoKTsKLSAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7Ci0gICAgICAgICAgICBtX2Nz
c0FnZW50LT5yZXNldCgpOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgICAg
IG1fd29ya2Vycy5jbGVhcigpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgICAg
ICBtX2RhdGFiYXNlUmVzb3VyY2VzLmNsZWFyKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCi0gICAgICAgIG1fZG9tU3RvcmFnZVJlc291cmNlcy5jbGVhcigpOwotI2VuZGlmCi0K
LSAgICAgICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgICAgICBtX2RvbUFnZW50LT5zZXREb2N1
bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bWFpblJlc291cmNlRmlyZWRET01Db250ZW50
RXZlbnQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIGlm
ICghZW5hYmxlZCgpIHx8ICFpc01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIHVybCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIG1fdGltZWxp
bmVBZ2VudC0+ZGlkTWFya0RPTUNvbnRlbnRFdmVudCgpOwotICAgIGlmIChtX2Zyb250ZW5kKQot
ICAgICAgICBtX2Zyb250ZW5kLT5kb21Db250ZW50RXZlbnRGaXJlZChjdXJyZW50VGltZSgpKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYWluUmVzb3VyY2VGaXJlZExvYWRFdmVu
dChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgaWYgKCFl
bmFibGVkKCkgfHwgIWlzTWFpblJlc291cmNlTG9hZGVyKGxvYWRlciwgdXJsKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFn
ZW50LT5kaWRNYXJrTG9hZEV2ZW50KCk7Ci0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1f
ZnJvbnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwotfQotCi1ib29sIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmlzTWFpblJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVcmwpCi17Ci0gICAgcmV0dXJuIGxvYWRlci0+ZnJhbWUo
KSA9PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpICYmIHJlcXVlc3RVcmwgPT0gbG9hZGVy
LT5yZXF1ZXN0VVJMKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6d2lsbFNlbmRS
ZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fZnJvbnRlbmQpIHsKLSAgICAgICAgLy8gT25s
eSBlbmFibGUgbG9hZCB0aW1pbmcgYW5kIHJhdyBoZWFkZXJzIGlmIGZyb250LWVuZCBpcyBhdHRh
Y2hlZCwgYXMgb3RoZXJ3aXNlIHdlIG1heSBwcm9kdWNlIG92ZXJoZWFkLgotICAgICAgICByZXF1
ZXN0LnNldFJlcG9ydExvYWRUaW1pbmcodHJ1ZSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0
UmF3SGVhZGVycyh0cnVlKTsKLQotICAgICAgICBpZiAobV9leHRyYUhlYWRlcnMpIHsKLSAgICAg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZXh0cmFIZWFkZXJz
LT5lbmQoKTsKLSAgICAgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2V4dHJhSGVhZGVycy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKGl0LT5maXJzdCwgaXQtPnNlY29uZCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5zdXJl
U2V0dGluZ3NMb2FkZWQoKQotewotICAgIGlmIChtX3NldHRpbmdzKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zZXR0aW5ncyA9IG5ldyBJbnNwZWN0b3JTZXR0aW5ncyhtX2NsaWVudCk7Ci0gICAg
bV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUiwgbV9zZXR0
aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6TW9uaXRvcmluZ1hIUkVuYWJsZWQp
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIo
KQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV90
aW1lbGluZUFnZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3RpbWVsaW5lQWdlbnQgPSBu
ZXcgSW5zcGVjdG9yVGltZWxpbmVBZ2VudChtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBpZiAobV9m
cm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+dGltZWxpbmVQcm9maWxlcldhc1N0YXJ0ZWQo
KTsKLQotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJv
ZmlsZXJFbmFibGVkLCB0cnVlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9w
VGltZWxpbmVQcm9maWxlcigpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghbV90aW1lbGluZUFnZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3RpbWVsaW5lQWdlbnQgPSAwOwotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBtX2Zyb250
ZW5kLT50aW1lbGluZVByb2ZpbGVyV2FzU3RvcHBlZCgpOwotCi0gICAgbV9zdGF0ZS0+c2V0Qm9v
bGVhbihJbnNwZWN0b3JTdGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIGZhbHNlKTsKLX0K
LQotI2lmIEVOQUJMRShXT1JLRVJTKQotY2xhc3MgUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJv
bnRlbmRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5k
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwg
SW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyQWN0aW9uIGFjdGlvbikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBuZXcgUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrKHdvcmtlciwg
YWN0aW9uKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUG9zdFdvcmtlck5vdGlmaWNhdGlvblRv
RnJvbnRlbmRUYXNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwg
SW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyQWN0aW9uIGFjdGlvbikKLSAgICAgICAgOiBtX3dv
cmtlcih3b3JrZXIpCi0gICAgICAgICwgbV9hY3Rpb24oYWN0aW9uKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKLSAgICAgICAgICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdENvbnRleHQpLT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICBpbnNwZWN0b3ItPnBvc3RXb3JrZXJOb3RpZmlj
YXRpb25Ub0Zyb250ZW5kKCptX3dvcmtlciwgbV9hY3Rpb24pOwotICAgICAgICB9Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIFJlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gbV93b3JrZXI7
Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyQWN0aW9uIG1fYWN0aW9uOwotfTsKLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVu
ZChjb25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYgd29ya2VyLCBJbnNwZWN0b3JDb250cm9s
bGVyOjpXb3JrZXJBY3Rpb24gYWN0aW9uKQotewotICAgIGlmICghbV9mcm9udGVuZCkKLSAgICAg
ICAgcmV0dXJuOwotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIHN3aXRjaCAo
YWN0aW9uKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJDcmVhdGVkOgot
ICAgICAgICBtX2Zyb250ZW5kLT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLmlkKCksIHdvcmtlci51
cmwoKSwgd29ya2VyLmlzU2hhcmVkV29ya2VyKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckRlc3Ryb3llZDoKLSAgICAgICAgbV9mcm9udGVu
ZC0+ZGlkRGVzdHJveVdvcmtlcih3b3JrZXIuaWQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSNlbmRpZgotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdvcmtlcihp
bnRwdHJfdCBpZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpCi17Ci0g
ICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZT4gd29ya2VyUmVzb3VyY2UoSW5zcGVjdG9yV29ya2VyUmVzb3VyY2U6
OmNyZWF0ZShpZCwgdXJsLCBpc1NoYXJlZFdvcmtlcikpOwotICAgIG1fd29ya2Vycy5zZXQoaWQs
IHdvcmtlclJlc291cmNlKTsKLSAgICBpZiAobV9pbnNwZWN0ZWRQYWdlICYmIG1fZnJvbnRlbmQp
Ci0gICAgICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnBvc3RU
YXNrKFBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzazo6Y3JlYXRlKHdvcmtlclJl
c291cmNlLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJDcmVhdGVkKSk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVdvcmtlcihpbnRwdHJfdCBpZCkKLXsKLSAg
ICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV29ya2Vyc01hcDo6aXRl
cmF0b3Igd29ya2VyUmVzb3VyY2UgPSBtX3dvcmtlcnMuZmluZChpZCk7Ci0gICAgaWYgKHdvcmtl
clJlc291cmNlID09IG1fd29ya2Vycy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICht
X2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5t
YWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlvblRv
RnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UtPnNlY29uZCwgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6V29ya2VyRGVzdHJveWVkKSk7Ci0gICAgbV93b3JrZXJzLnJlbW92ZSh3b3JrZXJS
ZXNvdXJjZSk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCi0KLSNpZiBFTkFCTEUoREFU
QUJBU0UpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVm
UHRyPERhdGFiYXNlPiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKQotewotICAgIGlmICghZW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZT4g
cmVzb3VyY2UgPSBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlOjpjcmVhdGUoZGF0YWJhc2UsIGRv
bWFpbiwgbmFtZSwgdmVyc2lvbik7Ci0KLSAgICBtX2RhdGFiYXNlUmVzb3VyY2VzLnNldChyZXNv
dXJjZS0+aWQoKSwgcmVzb3VyY2UpOwotCi0gICAgLy8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5k
IHdoaWxlIHZpc2libGUuCi0gICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIHJlc291cmNlLT5i
aW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotfQotI2VuZGlmCi0KLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Z2V0Q29va2llcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjb29raWVzLCBXVEY6OlN0
cmluZyogY29va2llc1N0cmluZykKLXsKLSAgICAvLyBJZiB3ZSBjYW4gZ2V0IHJhdyBjb29raWVz
LgotICAgIExpc3RIYXNoU2V0PENvb2tpZT4gcmF3Q29va2llc0xpc3Q7Ci0KLSAgICAvLyBJZiB3
ZSBjYW4ndCBnZXQgcmF3IGNvb2tpZXMgLSBmYWxsIGJhY2sgdG8gU3RyaW5nIHJlcHJlc2VudGF0
aW9uCi0gICAgU3RyaW5nIHN0cmluZ0Nvb2tpZXNMaXN0OwotCi0gICAgLy8gUmV0dXJuIHZhbHVl
IHRvIGdldFJhd0Nvb2tpZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBldmVyeSBjYWxsIGJlY2F1
c2UKLSAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIHBsYXRmb3JtL25ldHdvcmsgYmFja2VuZCBz
cGVjaWZpYywgYW5kIHRoZSBjYWxsIHdpbGwKLSAgICAvLyBhbHdheXMgcmV0dXJuIHRoZSBzYW1l
IHRydWUvZmFsc2UgdmFsdWUuCi0gICAgYm9vbCByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBmYWxz
ZTsKLQotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOwotICAgICAgICBjb25zdCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6RG9jdW1l
bnRSZXNvdXJjZU1hcCYgYWxsUmVzb3VyY2VzID0gZG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9h
ZGVyKCktPmFsbENhY2hlZFJlc291cmNlcygpOwotICAgICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
cjo6RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYWxsUmVzb3VyY2Vz
LmVuZCgpOwotICAgICAgICBmb3IgKENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291
cmNlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0Owot
ICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVu
dCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgZG9jQ29va2llc0xp
c3QpOwotCi0gICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5nIGZvciB0aGUg
U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCi0gICAgICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAgICAgc3RyaW5nQ29va2llc0xpc3QgKz0gZG9j
dW1lbnQtPmNvb2tpZShlYyk7Ci0gICAgICAgICAgICAgICAgLy8gRXhjZXB0aW9ucyBhcmUgdGhy
b3duIGJ5IGNvb2tpZSgpIGluIHNhbmRib3hlZCBmcmFtZXMuIFRoYXQgd29uJ3QgaGFwcGVuIGhl
cmUKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlICJkb2N1bWVudCIgaXMgdGhlIGRvY3VtZW50
IG9mIHRoZSBtYWluIGZyYW1lIG9mIHRoZSBwYWdlLgotICAgICAgICAgICAgICAgIEFTU0VSVCgh
ZWMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpbnQgY29va2llc1Np
emUgPSBkb2NDb29raWVzTGlzdC5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb29raWVzU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmF3
Q29va2llc0xpc3QuY29udGFpbnMoZG9jQ29va2llc0xpc3RbaV0pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmF3Q29va2llc0xpc3QuYWRkKGRvY0Nvb2tpZXNMaXN0W2ldKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmF3
Q29va2llc0ltcGxlbWVudGVkKQotICAgICAgICAqY29va2llcyA9IGJ1aWxkQXJyYXlGb3JDb29r
aWVzKHJhd0Nvb2tpZXNMaXN0KTsKLSAgICBlbHNlCi0gICAgICAgICpjb29raWVzU3RyaW5nID0g
c3RyaW5nQ29va2llc0xpc3Q7Ci19Ci0KLVBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4m
IGNvb2tpZXNMaXN0KQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29va2llcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLQotICAgIExpc3RIYXNoU2V0PENvb2tpZT46Oml0ZXJh
dG9yIGVuZCA9IGNvb2tpZXNMaXN0LmVuZCgpOwotICAgIExpc3RIYXNoU2V0PENvb2tpZT46Oml0
ZXJhdG9yIGl0ID0gY29va2llc0xpc3QuYmVnaW4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaXQg
IT0gZW5kOyArK2l0LCBpKyspCi0gICAgICAgIGNvb2tpZXMtPnB1c2hPYmplY3QoYnVpbGRPYmpl
Y3RGb3JDb29raWUoKml0KSk7Ci0KLSAgICByZXR1cm4gY29va2llczsKLX0KLQotUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNvbnRyb2xsZXI6OmJ1aWxkT2JqZWN0Rm9yQ29v
a2llKGNvbnN0IENvb2tpZSYgY29va2llKQotewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5n
KCJuYW1lIiwgY29va2llLm5hbWUpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoInZhbHVlIiwgY29v
a2llLnZhbHVlKTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJkb21haW4iLCBjb29raWUuZG9tYWlu
KTsKLSAgICB2YWx1ZS0+c2V0U3RyaW5nKCJwYXRoIiwgY29va2llLnBhdGgpOwotICAgIHZhbHVl
LT5zZXROdW1iZXIoImV4cGlyZXMiLCBjb29raWUuZXhwaXJlcyk7Ci0gICAgdmFsdWUtPnNldE51
bWJlcigic2l6ZSIsIChjb29raWUubmFtZS5sZW5ndGgoKSArIGNvb2tpZS52YWx1ZS5sZW5ndGgo
KSkpOwotICAgIHZhbHVlLT5zZXRCb29sZWFuKCJodHRwT25seSIsIGNvb2tpZS5odHRwT25seSk7
Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oInNlY3VyZSIsIGNvb2tpZS5zZWN1cmUpOwotICAgIHZh
bHVlLT5zZXRCb29sZWFuKCJzZXNzaW9uIiwgY29va2llLnNlc3Npb24pOwotICAgIHJldHVybiB2
YWx1ZTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWxldGVDb29raWUoY29uc3Qg
U3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikKLXsKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgp
KSkgewotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAg
ICAgICAgaWYgKGRvY3VtZW50LT51cmwoKS5ob3N0KCkgIT0gZG9tYWluKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGNvbnN0IENhY2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJl
c291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7Ci0gICAgICAgIENhY2hlZFJlc291cmNlTG9hZGVyOjpE
b2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBhbGxSZXNvdXJjZXMuZW5k
KCk7Ci0gICAgICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQ
YXJzZWRVUkxTdHJpbmcsIGl0LT5zZWNvbmQtPnVybCgpKSwgY29va2llTmFtZSk7Ci0gICAgfQot
fQotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpk
aWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3Rv
cmFnZSwgRnJhbWUqIGZyYW1lKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBkb21TdG9yYWdlRW5k
ID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoRE9NU3RvcmFnZVJlc291
cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQg
IT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmlzU2FtZUhv
c3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWZQdHI8U3RvcmFnZT4gZG9tU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZShmcmFtZSwg
c3RvcmFnZUFyZWEpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U+IHJl
c291cmNlID0gSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpjcmVhdGUoZG9tU3RvcmFnZS5n
ZXQoKSwgaXNMb2NhbFN0b3JhZ2UsIGZyYW1lKTsKLQotICAgIG1fZG9tU3RvcmFnZVJlc291cmNl
cy5zZXQocmVzb3VyY2UtPmlkKCksIHJlc291cmNlKTsKLQotICAgIC8vIFJlc291cmNlcyBhcmUg
b25seSBib3VuZCB3aGlsZSB2aXNpYmxlLgotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBy
ZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKLX0KLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDcmVhdGVXZWJTb2Nr
ZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBLVVJMJiBkb2N1bWVudFVSTCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotCi0gICAgaWYgKG1fcmVzb3VyY2VB
Z2VudCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50LT5kaWRDcmVhdGVXZWJTb2NrZXQoaWRlbnRp
ZmllciwgcmVxdWVzdFVSTCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50VVJMKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0JiByZXF1ZXN0KQotewotICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1fcmVz
b3VyY2VBZ2VudC0+d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KGlkZW50aWZpZXIs
IHJlcXVlc3QpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFJlY2VpdmVXZWJT
b2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBpZiAobV9yZXNvdXJj
ZUFnZW50KQotICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5k
c2hha2VSZXNwb25zZShpZGVudGlmaWVyLCByZXNwb25zZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkQ2xvc2VXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQot
ewotICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+ZGlk
Q2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NL
RVRTKQotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi1ib29sIEluc3BlY3RvckNv
bnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3Byb2ZpbGVyQWdlbnQtPmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydFVzZXJJbml0aWF0ZWRQcm9m
aWxpbmcoKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9w
cm9maWxlckFnZW50LT5zdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKLSAgICBtX3N0YXRl
LT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nLCB0cnVl
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVXNlckluaXRpYXRlZFByb2Zp
bGluZygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3By
b2ZpbGVyQWdlbnQtPnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgbV9zdGF0ZS0+
c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6dXNlckluaXRpYXRlZFByb2ZpbGluZywgZmFsc2Up
OwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGVuYWJsZWQoKSAmJiBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5
cywgYm9vbCBza2lwUmVjb21waWxlKQotewotICAgIGlmIChhbHdheXMpCi0gICAgICAgIG1fc2V0
dGluZ3MtPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OlByb2ZpbGVyQWx3YXlzRW5hYmxl
ZCwgdHJ1ZSk7Ci0gICAgbV9wcm9maWxlckFnZW50LT5lbmFibGUoc2tpcFJlY29tcGlsZSk7Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlz
KQotewotICAgIGlmIChhbHdheXMpCi0gICAgICAgIG1fc2V0dGluZ3MtPnNldEJvb2xlYW4oSW5z
cGVjdG9yU2V0dGluZ3M6OlByb2ZpbGVyQWx3YXlzRW5hYmxlZCwgZmFsc2UpOwotICAgIG1fcHJv
ZmlsZXJBZ2VudC0+ZGlzYWJsZSgpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0FuZEVuYWJsZURlYnVn
Z2VyKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGRlYnVnZ2VyRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZnJvbnRl
bmQpIHsKLSAgICAgICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IHRydWU7Ci0gICAgICAg
IHNob3dQYW5lbChTY3JpcHRzUGFuZWwpOwotICAgIH0gZWxzZQotICAgICAgICBlbmFibGVEZWJ1
Z2dlcihmYWxzZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlRGVidWdn
ZXIoYm9vbCBhbHdheXMpCi17Ci0gICAgQVNTRVJUKCFkZWJ1Z2dlckVuYWJsZWQoKSk7Ci0gICAg
aWYgKGFsd2F5cykKLSAgICAgICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0
aW5nczo6RGVidWdnZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKLQotICAgIEFTU0VSVChtX2luc3Bl
Y3RlZFBhZ2UpOwotCi0gICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y3JlYXRlKHRoaXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIG1fYnJvd3NlckRlYnVnZ2Vy
QWdlbnQgPSBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOwotICAg
IG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQtPmluc3BlY3RlZFVSTENoYW5nZWQoaW5zcGVjdGVkVVJM
KCkpOwotCi0gICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFibGVkKCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3YXlzKQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYWx3YXlzKQotICAg
ICAgICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFs
d2F5c0VuYWJsZWQsIGZhbHNlKTsKLQotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotCi0g
ICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7Ci0gICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC5j
bGVhcigpOwotCi0gICAgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93biA9IGZhbHNlOwotCi0gICAg
aWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRlYnVnZ2VyV2FzRGlzYWJsZWQo
KTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQotewotICAgIGlmICht
X2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7Ci19Ci0K
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKLXsKLSAgICBtX3N0YXRlLT5zZXRP
YmplY3QoSW5zcGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cywgYnJlYWtwb2ludHMpOwot
fQotI2VuZGlmCi0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCi17Ci0gICAgaWYgKG1f
ZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQo
Y2FsbElkLCBzY3JpcHQpOwotICAgIGVsc2UKLSAgICAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0
Q29tbWFuZHMuYXBwZW5kKHBhaXI8bG9uZywgU3RyaW5nPihjYWxsSWQsIHNjcmlwdCkpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQo
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYganNvblJlc3VsdCkKLXsKLSAgICBTY3JpcHRTdGF0
ZSogc2NyaXB0U3RhdGUgPSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9p
bnNwZWN0ZWRQYWdlKTsKLSAgICBTY3JpcHRPYmplY3Qgd2luZG93OwotICAgIFNjcmlwdEdsb2Jh
bE9iamVjdDo6Z2V0KHNjcmlwdFN0YXRlLCAid2luZG93Iiwgd2luZG93KTsKLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24od2luZG93LCAiZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVu
ZCIpOwotICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoanNvblJlc3VsdCk7Ci0gICAgZnVuY3Rpb24uY2FsbCgpOwotfQotCi1z
dGF0aWMgUGF0aCBxdWFkVG9QYXRoKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKLXsKLSAgICBQYXRo
IHF1YWRQYXRoOwotICAgIHF1YWRQYXRoLm1vdmVUbyhxdWFkLnAxKCkpOwotICAgIHF1YWRQYXRo
LmFkZExpbmVUbyhxdWFkLnAyKCkpOwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnAzKCkp
OwotICAgIHF1YWRQYXRoLmFkZExpbmVUbyhxdWFkLnA0KCkpOwotICAgIHF1YWRQYXRoLmNsb3Nl
U3VicGF0aCgpOwotICAgIHJldHVybiBxdWFkUGF0aDsKLX0KLQotc3RhdGljIHZvaWQgZHJhd091
dGxpbmVkUXVhZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVh
ZCwgY29uc3QgQ29sb3ImIGZpbGxDb2xvcikKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG91dGxp
bmVUaGlja25lc3MgPSAyOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBvdXRsaW5lQ29sb3IoNjIs
IDg2LCAxODAsIDIyOCk7Ci0KLSAgICBQYXRoIHF1YWRQYXRoID0gcXVhZFRvUGF0aChxdWFkKTsK
LQotICAgIC8vIENsaXAgb3V0IHRoZSBxdWFkLCB0aGVuIGRyYXcgd2l0aCBhIDJweCBzdHJva2Ug
dG8gZ2V0IGEgcGl4ZWwKLSAgICAvLyBvZiBvdXRsaW5lIChiZWNhdXNlIGluZmxhdGluZyBhIHF1
YWQgaXMgaGFyZCkKLSAgICB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250
ZXh0LmNsaXBPdXQocXVhZFBhdGgpOwotCi0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKG91dGxpbmVUaGlja25lc3MpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG91
dGxpbmVDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIGNvbnRleHQuc3Ryb2tl
UGF0aChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgfQotCi0g
ICAgLy8gTm93IGRvIHRoZSBmaWxsCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRQYXRoKTsK
LX0KLQotc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBGbG9hdFF1YWQmIGNsaXBR
dWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIGNvbnRleHQuc2F2ZSgpOwotICAg
IFBhdGggY2xpcFF1YWRQYXRoID0gcXVhZFRvUGF0aChjbGlwUXVhZCk7Ci0gICAgY29udGV4dC5j
bGlwT3V0KGNsaXBRdWFkUGF0aCk7Ci0gICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBxdWFk
LCBmaWxsQ29sb3IpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOwotfQotCi1zdGF0aWMgdm9pZCBk
cmF3SGlnaGxpZ2h0Rm9yQm94KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRR
dWFkJiBjb250ZW50UXVhZCwgY29uc3QgRmxvYXRRdWFkJiBwYWRkaW5nUXVhZCwgY29uc3QgRmxv
YXRRdWFkJiBib3JkZXJRdWFkLCBjb25zdCBGbG9hdFF1YWQmIG1hcmdpblF1YWQpCi17Ci0gICAg
c3RhdGljIGNvbnN0IENvbG9yIGNvbnRlbnRCb3hDb2xvcigxMjUsIDE3MywgMjE3LCAxMjgpOwot
ICAgIHN0YXRpYyBjb25zdCBDb2xvciBwYWRkaW5nQm94Q29sb3IoMTI1LCAxNzMsIDIxNywgMTYw
KTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgYm9yZGVyQm94Q29sb3IoMTI1LCAxNzMsIDIxNywg
MTkyKTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgbWFyZ2luQm94Q29sb3IoMTI1LCAxNzMsIDIx
NywgMjI4KTsKLQotICAgIGlmIChtYXJnaW5RdWFkICE9IGJvcmRlclF1YWQpCi0gICAgICAgIGRy
YXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBtYXJnaW5RdWFkLCBib3JkZXJRdWFkLCBt
YXJnaW5Cb3hDb2xvcik7Ci0gICAgaWYgKGJvcmRlclF1YWQgIT0gcGFkZGluZ1F1YWQpCi0gICAg
ICAgIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChjb250ZXh0LCBib3JkZXJRdWFkLCBwYWRkaW5n
UXVhZCwgYm9yZGVyQm94Q29sb3IpOwotICAgIGlmIChwYWRkaW5nUXVhZCAhPSBjb250ZW50UXVh
ZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIHBhZGRpbmdRdWFk
LCBjb250ZW50UXVhZCwgcGFkZGluZ0JveENvbG9yKTsKLQotICAgIGRyYXdPdXRsaW5lZFF1YWQo
Y29udGV4dCwgY29udGVudFF1YWQsIGNvbnRlbnRCb3hDb2xvcik7Ci19Ci0KLXN0YXRpYyB2b2lk
IGRyYXdIaWdobGlnaHRGb3JMaW5lQm94ZXNPclNWR1JlbmRlcmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIGxpbmVCb3hRdWFkcykKLXsKLSAgICBz
dGF0aWMgY29uc3QgQ29sb3IgbGluZUJveENvbG9yKDEyNSwgMTczLCAyMTcsIDEyOCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpbmVCb3hRdWFkcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBsaW5lQm94UXVhZHNbaV0sIGxpbmVCb3hDb2xv
cik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb252ZXJ0RnJvbUZyYW1lVG9NYWluRnJhbWUo
RnJhbWUqIGZyYW1lLCBJbnRSZWN0JiByZWN0KQotewotICAgIHJlY3QgPSBmcmFtZS0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3cocmVjdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgZnJhbWVU
b01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCi17Ci0gICAgSW50UG9pbnQgbWFpbkZyYW1l
UG9pbnQgPSBmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coSW50UG9pbnQoKSkpOwotICAgIHJl
dHVybiBtYWluRnJhbWVQb2ludCAtIEludFBvaW50KCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25z
dAotewotICAgIGlmICghbV9oaWdobGlnaHRlZE5vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBtX2hpZ2hsaWdodGVkTm9kZS0+cmVuZGVyZXIoKTsK
LSAgICBGcmFtZSogY29udGFpbmluZ0ZyYW1lID0gbV9oaWdobGlnaHRlZE5vZGUtPmRvY3VtZW50
KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCAhY29udGFpbmluZ0ZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbnRTaXplIG1haW5GcmFtZU9mZnNldCA9IGZyYW1lVG9NYWlu
RnJhbWVPZmZzZXQoY29udGFpbmluZ0ZyYW1lKTsKLSAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0g
cmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KHRydWUpOwotICAgIGJvdW5kaW5nQm94
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLQotICAgIEludFJlY3QgdGl0bGVSZWZlcmVuY2VCb3gg
PSBib3VuZGluZ0JveDsKLQotICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwotCi0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwotICAg
IEZsb2F0UmVjdCBvdmVybGF5UmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCgpOwotICAg
IGlmICghb3ZlcmxheVJlY3QuY29udGFpbnMoYm91bmRpbmdCb3gpICYmICFib3VuZGluZ0JveC5j
b250YWlucyhlbmNsb3NpbmdJbnRSZWN0KG92ZXJsYXlSZWN0KSkpCi0gICAgICAgIG92ZXJsYXlS
ZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgY29udGV4dC50cmFuc2xhdGUo
LW92ZXJsYXlSZWN0LngoKSwgLW92ZXJsYXlSZWN0LnkoKSk7Ci0KLSAgICAvLyBSZW5kZXJTVkdS
b290IHNob3VsZCBiZSBoaWdobGlnaHRlZCB0aHJvdWdoIHRoZSBpc0JveCgpIGNvZGUgcGF0aCwg
YWxsIG90aGVyIFNWRyBlbGVtZW50cyBzaG91bGQganVzdCBkdW1wIHRoZWlyIGFic29sdXRlUXVh
ZHMoKS4KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGJvb2wgaXNTVkdSZW5kZXJlciA9IHJlbmRlcmVy
LT5ub2RlKCkgJiYgcmVuZGVyZXItPm5vZGUoKS0+aXNTVkdFbGVtZW50KCkgJiYgIXJlbmRlcmVy
LT5pc1NWR1Jvb3QoKTsKLSNlbHNlCi0gICAgYm9vbCBpc1NWR1JlbmRlcmVyID0gZmFsc2U7Ci0j
ZW5kaWYKLQotICAgIGlmIChyZW5kZXJlci0+aXNCb3goKSAmJiAhaXNTVkdSZW5kZXJlcikgewot
ICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKLQot
ICAgICAgICBJbnRSZWN0IGNvbnRlbnRCb3ggPSByZW5kZXJCb3gtPmNvbnRlbnRCb3hSZWN0KCk7
Ci0KLSAgICAgICAgSW50UmVjdCBwYWRkaW5nQm94KGNvbnRlbnRCb3gueCgpIC0gcmVuZGVyQm94
LT5wYWRkaW5nTGVmdCgpLCBjb250ZW50Qm94LnkoKSAtIHJlbmRlckJveC0+cGFkZGluZ1RvcCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudEJveC53aWR0aCgpICsgcmVuZGVy
Qm94LT5wYWRkaW5nTGVmdCgpICsgcmVuZGVyQm94LT5wYWRkaW5nUmlnaHQoKSwgY29udGVudEJv
eC5oZWlnaHQoKSArIHJlbmRlckJveC0+cGFkZGluZ1RvcCgpICsgcmVuZGVyQm94LT5wYWRkaW5n
Qm90dG9tKCkpOwotICAgICAgICBJbnRSZWN0IGJvcmRlckJveChwYWRkaW5nQm94LngoKSAtIHJl
bmRlckJveC0+Ym9yZGVyTGVmdCgpLCBwYWRkaW5nQm94LnkoKSAtIHJlbmRlckJveC0+Ym9yZGVy
VG9wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdCb3gud2lkdGgoKSArIHJl
bmRlckJveC0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyQm94LT5ib3JkZXJSaWdodCgpLCBwYWRkaW5n
Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5ib3JkZXJUb3AoKSArIHJlbmRlckJveC0+Ym9yZGVy
Qm90dG9tKCkpOwotICAgICAgICBJbnRSZWN0IG1hcmdpbkJveChib3JkZXJCb3gueCgpIC0gcmVu
ZGVyQm94LT5tYXJnaW5MZWZ0KCksIGJvcmRlckJveC55KCkgLSByZW5kZXJCb3gtPm1hcmdpblRv
cCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3gud2lkdGgoKSArIHJlbmRl
ckJveC0+bWFyZ2luTGVmdCgpICsgcmVuZGVyQm94LT5tYXJnaW5SaWdodCgpLCBib3JkZXJCb3gu
aGVpZ2h0KCkgKyByZW5kZXJCb3gtPm1hcmdpblRvcCgpICsgcmVuZGVyQm94LT5tYXJnaW5Cb3R0
b20oKSk7Ci0KLSAgICAgICAgdGl0bGVSZWZlcmVuY2VCb3ggPSBtYXJnaW5Cb3g7Ci0gICAgICAg
IHRpdGxlUmVmZXJlbmNlQm94Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgdGl0bGVS
ZWZlcmVuY2VCb3gubW92ZShib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94LnkoKSk7Ci0KLSAg
ICAgICAgRmxvYXRRdWFkIGFic0NvbnRlbnRRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1
dGVRdWFkKEZsb2F0UmVjdChjb250ZW50Qm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNQYWRk
aW5nUXVhZCA9IHJlbmRlckJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QocGFkZGlu
Z0JveCkpOwotICAgICAgICBGbG9hdFF1YWQgYWJzQm9yZGVyUXVhZCA9IHJlbmRlckJveC0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm9yZGVyQm94KSk7Ci0gICAgICAgIEZsb2F0UXVh
ZCBhYnNNYXJnaW5RdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChtYXJnaW5Cb3gpKTsKLQotICAgICAgICBhYnNDb250ZW50UXVhZC5tb3ZlKG1haW5GcmFtZU9m
ZnNldCk7Ci0gICAgICAgIGFic1BhZGRpbmdRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAg
ICAgICAgYWJzQm9yZGVyUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0gICAgICAgIGFic01h
cmdpblF1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwotCi0gICAgICAgIGRyYXdIaWdobGlnaHRG
b3JCb3goY29udGV4dCwgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJR
dWFkLCBhYnNNYXJnaW5RdWFkKTsKLSAgICB9IGVsc2UgaWYgKHJlbmRlcmVyLT5pc1JlbmRlcklu
bGluZSgpIHx8IGlzU1ZHUmVuZGVyZXIpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBz
aG93IG1hcmdpbnMvcGFkZGluZy9ib3JkZXIgZm9yIGlubGluZXMuCi0gICAgICAgIFZlY3RvcjxG
bG9hdFF1YWQ+IGxpbmVCb3hRdWFkczsKLSAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMo
bGluZUJveFF1YWRzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpbmVCb3hR
dWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIGxpbmVCb3hRdWFkc1tpXSArPSBtYWluRnJh
bWVPZmZzZXQ7Ci0KLSAgICAgICAgZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVy
ZXIoY29udGV4dCwgbGluZUJveFF1YWRzKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IG5vZGUgdGl0
bGUgaWYgbmVjZXNzYXJ5LgotCi0gICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJDb3JlOjpTZXR0aW5ncyogc2V0dGlu
Z3MgPSBjb250YWluaW5nRnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgZHJhd0VsZW1lbnRUaXRsZShj
b250ZXh0LCB0aXRsZVJlZmVyZW5jZUJveCwgb3ZlcmxheVJlY3QsIHNldHRpbmdzKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYg
b3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykgY29uc3QKLXsKLSAgICBz
dGF0aWMgY29uc3QgaW50IHJlY3RJbmZsYXRlUHggPSA0OwotICAgIHN0YXRpYyBjb25zdCBpbnQg
Zm9udEhlaWdodFB4ID0gMTI7Ci0gICAgc3RhdGljIGNvbnN0IGludCBib3JkZXJXaWR0aFB4ID0g
MTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEJhY2tncm91bmRDb2xvcigyNTUsIDI1
NSwgMTk0LCAyNTUpOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQm9yZGVyQ29sb3Io
Q29sb3I6OmJsYWNrKTsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9vbHRpcEZvbnRDb2xvcihD
b2xvcjo6YmxhY2spOwotCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSk7Ci0gICAgYm9vbCBpc1hIVE1MID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCk7Ci0gICAgU3RyaW5nIG5vZGVUaXRsZSA9
IGlzWEhUTUwgPyBlbGVtZW50LT5ub2RlTmFtZSgpIDogZWxlbWVudC0+bm9kZU5hbWUoKS5sb3dl
cigpOwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGVsZW1lbnQtPmdldElkQXR0
cmlidXRlKCk7Ci0gICAgaWYgKCFpZFZhbHVlLmlzTnVsbCgpICYmICFpZFZhbHVlLmlzRW1wdHko
KSkgewotICAgICAgICBub2RlVGl0bGUgKz0gIiMiOwotICAgICAgICBub2RlVGl0bGUgKz0gaWRW
YWx1ZTsKLSAgICB9Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0NsYXNzKCkgJiYgZWxlbWVudC0+aXNT
dHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgY2xhc3NO
YW1lc1N0cmluZyA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NO
YW1lcygpOwotICAgICAgICBzaXplX3QgY2xhc3NOYW1lQ291bnQgPSBjbGFzc05hbWVzU3RyaW5n
LnNpemUoKTsKLSAgICAgICAgaWYgKGNsYXNzTmFtZUNvdW50KSB7Ci0gICAgICAgICAgICBIYXNo
U2V0PEF0b21pY1N0cmluZz4gdXNlZENsYXNzTmFtZXM7Ci0gICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNsYXNzTmFtZUNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNTdHJpbmdbaV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHVzZWRDbGFzc05hbWVzLmNvbnRhaW5zKGNsYXNzTmFtZSkpCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHVzZWRDbGFzc05hbWVzLmFk
ZChjbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIG5vZGVUaXRsZSArPSAiLiI7Ci0gICAgICAg
ICAgICAgICAgbm9kZVRpdGxlICs9IGNsYXNzTmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIEVsZW1lbnQqIGhpZ2hsaWdodGVkRWxlbWVudCA9IG1faGlnaGxpZ2h0
ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkgPyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9oaWdobGln
aHRlZE5vZGUuZ2V0KCkpIDogMDsKLSAgICBub2RlVGl0bGUgKz0gIiBbIjsKLSAgICBub2RlVGl0
bGUgKz0gU3RyaW5nOjpudW1iZXIoaGlnaGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0ZWRFbGVt
ZW50LT5vZmZzZXRXaWR0aCgpIDogYm91bmRpbmdCb3gud2lkdGgoKSk7Ci0gICAgbm9kZVRpdGxl
LmFwcGVuZChzdGF0aWNfY2FzdDxVQ2hhcj4oMHgwMEQ3KSk7IC8vICZ0aW1lczsKLSAgICBub2Rl
VGl0bGUgKz0gU3RyaW5nOjpudW1iZXIoaGlnaGxpZ2h0ZWRFbGVtZW50ID8gaGlnaGxpZ2h0ZWRF
bGVtZW50LT5vZmZzZXRIZWlnaHQoKSA6IGJvdW5kaW5nQm94LmhlaWdodCgpKTsKLSAgICBub2Rl
VGl0bGUgKz0gIl0iOwotCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgRm9udEZhbWls
eSBmYW1pbHk7Ci0gICAgZmFtaWx5LnNldEZhbWlseShzZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5
KCkpOwotICAgIGRlc2Muc2V0RmFtaWx5KGZhbWlseSk7Ci0gICAgZGVzYy5zZXRDb21wdXRlZFNp
emUoZm9udEhlaWdodFB4KTsKLSAgICBGb250IGZvbnQgPSBGb250KGRlc2MsIDAsIDApOwotICAg
IGZvbnQudXBkYXRlKDApOwotCi0gICAgVGV4dFJ1biBub2RlVGl0bGVSdW4obm9kZVRpdGxlKTsK
LSAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IGJvdW5kaW5nQm94LmJvdHRvbUxlZnQoKTsK
LSAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOwot
ICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJl
Y3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWlnaHRQeCkpOwot
ICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOwotCi0gICAgLy8gVGhlIGluaXRp
YWwgb2Zmc2V0cyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgYSAxcHgtdGhpY2sgYm9yZGVyIHN0
cm9rZSAod2hpY2ggaXMgbm90IGEgcGFydCBvZiB0aGUgcmVjdGFuZ2xlKS4KLSAgICBpbnQgZHgg
PSAtYm9yZGVyV2lkdGhQeDsKLSAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwotCi0gICAgLy8g
SWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQt
YWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3Qu
cmlnaHQoKSA+IG92ZXJsYXlSZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3Qu
cmlnaHQoKSAtIHRpdGxlUmVjdC5yaWdodCgpOwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSBsZWZ0IG9mIG92ZXJsYXlSZWN0LCBsZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0
aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0LngoKSArIGR4IDwgb3ZlcmxheVJl
Y3QueCgpKQotICAgICAgICBkeCA9IG92ZXJsYXlSZWN0LngoKSAtIHRpdGxlUmVjdC54KCkgLSBi
b3JkZXJXaWR0aFB4OwotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBib3R0
b20gb2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2YgYm91bmRpbmcgYm94Lgot
ICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkgPiBvdmVybGF5UmVjdC5ib3R0b20oKSkgewotICAg
ICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAtIHRpdGxlUmVjdC5ib3R0b20oKSAtIGJvcmRlcldp
ZHRoUHg7Ci0gICAgICAgIC8vIElmIHRoZSB0aXAgc3RpbGwgc3RpY2tzIGJleW9uZCB0aGUgYm90
dG9tIG9mIG92ZXJsYXlSZWN0LCBib3R0b20tYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJv
dW5kYXJ5LgotICAgICAgICBpZiAodGl0bGVSZWN0LmJvdHRvbSgpICsgZHkgPiBvdmVybGF5UmVj
dC5ib3R0b20oKSkKLSAgICAgICAgICAgIGR5ID0gb3ZlcmxheVJlY3QuYm90dG9tKCkgLSB0aXRs
ZVJlY3QuYm90dG9tKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25k
IHRoZSB0b3Agb2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBhdCB0b3Agb2Ygb3ZlcmxheVJl
Y3QuCi0gICAgaWYgKHRpdGxlUmVjdC55KCkgKyBkeSA8IG92ZXJsYXlSZWN0LnkoKSkKLSAgICAg
ICAgZHkgPSBvdmVybGF5UmVjdC55KCkgLSB0aXRsZVJlY3QueSgpICsgYm9yZGVyV2lkdGhQeDsK
LQotICAgIHRpdGxlUmVjdC5tb3ZlKGR4LCBkeSk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cih0b29sdGlwQm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOwotICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHRvb2x0aXBCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNv
bnRleHQuZHJhd1JlY3QodGl0bGVSZWN0KTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcih0b29s
dGlwRm9udENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBjb250ZXh0LmRyYXdUZXh0
KGZvbnQsIG5vZGVUaXRsZVJ1biwgSW50UG9pbnQodGl0bGVSZWN0LngoKSArIHJlY3RJbmZsYXRl
UHgsIHRpdGxlUmVjdC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpvcGVuSW5JbnNwZWN0ZWRXaW5kb3coY29uc3QgU3Ry
aW5nJiB1cmwpCi17Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCk7Ci0KLSAgICBGcmFtZUxvYWRSZXF1ZXN0IHJlcXVlc3QobWFpbkZyYW1lLT5kb2N1
bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBSZXNvdXJjZVJlcXVlc3QoKSwgIl9ibGFuayIpOwot
Ci0gICAgYm9vbCBjcmVhdGVkOwotICAgIFdpbmRvd0ZlYXR1cmVzIHdpbmRvd0ZlYXR1cmVzOwot
ICAgIEZyYW1lKiBuZXdGcmFtZSA9IFdlYkNvcmU6OmNyZWF0ZVdpbmRvdyhtYWluRnJhbWUsIG1h
aW5GcmFtZSwgcmVxdWVzdCwgd2luZG93RmVhdHVyZXMsIGNyZWF0ZWQpOwotICAgIGlmICghbmV3
RnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGlj
YXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICBuZXdGcmFtZS0+bG9h
ZGVyKCktPnNldE9wZW5lcihtYWluRnJhbWUpOwotICAgIG5ld0ZyYW1lLT5wYWdlKCktPnNldE9w
ZW5lZEJ5RE9NKCk7Ci0gICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VMb2NhdGlvbihtYWlu
RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIG5ld0ZyYW1lLT5sb2FkZXIoKS0+
Y29tcGxldGVVUkwodXJsKSwgIiIsIGZhbHNlLCBmYWxzZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkU2NyaXB0VG9FdmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJj
ZSkKLXsKLSAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmFwcGVuZChzb3VyY2UpOwotfQot
Ci12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25M
b2FkKCkKLXsKLSAgICBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmNsZWFyKCk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRXh0ZW5zaW9uQVBJKGNvbnN0IFN0
cmluZyYgc291cmNlKQotewotICAgIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJID0gc291cmNlOwot
fQotCi1LVVJMIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFVSTCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxvYWRQYWdlKCkKLXsKLSAgICAvLyBG
SVhNRTogV2h5IGRvIHdlIHNldCB0aGUgdXNlciBnZXN0dXJlIGluZGljYXRvciBoZXJlPwotICAg
IFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKLSAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5uYXZpZ2F0aW9uU2No
ZWR1bGVyKCktPnNjaGVkdWxlUmVmcmVzaCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNldEV4dHJhSGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaGVhZGVycykK
Ky8vIEZJWE1FOiB0ZW1wb3Jhcnkgc29sdXRpb24uIEl0IHdpbGwgYmVjb21lIGEgc2VwYXJhdGUg
Y2xhc3MgaW4gdGhlIG5leHQgcGF0Y2ggYW5kIENvbnRyb2xsZXIgcmVsYXRlZCBzdWJzZXQgb2Yg
ZnVuY3Rpb25zIHdpbGwgYmUgbW92ZWQgZnJvbSBJbnNwZWN0b3JBZ2VudCB0byBJbnNwZWN0b3JD
b250cm9sZXIuCitJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2Uq
IHBhZ2UsIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KQorICAgIDogSW5zcGVjdG9y
QWdlbnQodGhpcywgcGFnZSwgaW5zcGVjdG9yQ2xpZW50KQogewotICAgIG1fZXh0cmFIZWFkZXJz
ID0gYWRvcHRQdHIobmV3IEhUVFBIZWFkZXJNYXAoKSk7Ci0gICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLT5lbmQoKTsKLSAgICBmb3IgKEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlOwotICAgICAgICBpZiAoIWl0LT5zZWNvbmQtPmFz
U3RyaW5nKCZ2YWx1ZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9leHRyYUhl
YWRlcnMtPmFkZChpdC0+Zmlyc3QsIHZhbHVlKTsKLSAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCmluZGV4IDkwYTAzMDAuLjQyZTk2MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtMSwzNjUgKzEsNDkgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgSW5zcGVjdG9yQ29udHJvbGxlcl9oCiAj
ZGVmaW5lIEluc3BlY3RvckNvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5o
IgotI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJQ
YWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgIkluc3BlY3RvckFn
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkUmVzb3VyY2U7Ci1j
bGFzcyBDaGFyYWN0ZXJEYXRhOwotY2xhc3MgRGF0YWJhc2U7Ci1jbGFzcyBET01XcmFwcGVyV29y
bGQ7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIERvY3VtZW50TG9hZGVyOwotY2xhc3MgRmxvYXRS
ZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgSFRUUEhlYWRlck1hcDsKLWNsYXNz
IEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBJbmplY3RlZFNjcmlwdDsKLWNsYXNzIEluamVjdGVkU2Ny
aXB0SG9zdDsKLWNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI7Ci1jbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDsKIGNsYXNzIElu
c3BlY3RvckNsaWVudDsKLWNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKLWNsYXNzIEluc3Bl
Y3RvckNTU0FnZW50OwotY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U7Ci1jbGFz
cyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OwotY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJj
ZTsKLWNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZDsKLWNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwotY2xhc3MgSW5zcGVjdG9yT2JqZWN0
OwotY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDsKLWNsYXNzIEluc3BlY3RvclJlc291cmNl
QWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JSdW50aW1lQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JTZXR0
aW5nczsKLWNsYXNzIEluc3BlY3RvclN0YXRlOwotY2xhc3MgSW5zcGVjdG9yU3RvcmFnZUFnZW50
OwotY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKLWNsYXNzIEluc3BlY3RvclZhbHVlOwot
Y2xhc3MgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2U7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgS1VS
TDsKLWNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwotY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotY2xh
c3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFJlc291cmNlRXJyb3I7Ci1jbGFzcyBTY3JpcHRB
cmd1bWVudHM7Ci1jbGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci1jbGFzcyBTY3JpcHRQcm9maWxlOwot
Y2xhc3MgU2hhcmVkQnVmZmVyOwotY2xhc3MgU3RvcmFnZUFyZWE7CiAKLSNpZiBFTkFCTEUoT0ZG
TElORV9XRUJfQVBQTElDQVRJT05TKQotY2xhc3MgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi1jbGFzcyBJbnNwZWN0b3JG
aWxlU3lzdGVtQWdlbnQ7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShXRUJfU09DS0VUUykKLWNsYXNz
IFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q7Ci1jbGFzcyBXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZTsKLSNlbmRpZgotCi1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JDb250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisvLyBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uLiBJdCB3aWxsIGJlY29tZSBhIHNlcGFy
YXRlIGNsYXNzIGluIHRoZSBuZXh0IHBhdGNoIGFuZCBjb250cm9sbGVyIHJlbGF0ZWQgc3Vic2V0
IG9mIGZ1bmN0aW9ucyB3aWxsIGJlIG1vdmVkIGZyb20gSW5zcGVjdG9yQWdlbnQgdG8gSW5zcGVj
dG9yQ29udHJvbGVyLgorY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlciA6IHB1YmxpYyBJbnNwZWN0
b3JBZ2VudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQ
YW5lbDsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRWxlbWVudHNQYW5lbDsKLSAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgUHJvZmlsZXNQYW5lbDsKLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgU2NyaXB0c1BhbmVsOwotCiAgICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdl
KiwgSW5zcGVjdG9yQ2xpZW50Kik7Ci0gICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsKLQotICAg
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBpbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgcmV0dXJuIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuZ2V0KCk7IH0KLSAgICBJbnNw
ZWN0b3JDbGllbnQqIGluc3BlY3RvckNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAg
SW5qZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEhvc3QoKSB7IHJldHVybiBtX2luamVj
dGVkU2NyaXB0SG9zdC5nZXQoKTsgfQotCi0gICAgdm9pZCBpbnNwZWN0ZWRQYWdlRGVzdHJveWVk
KCk7Ci0KLSAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKLQotICAgIFBhZ2UqIGluc3BlY3RlZFBh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RlZFBhZ2U7IH0KLSAgICBLVVJMIGluc3BlY3Rl
ZFVSTCgpIGNvbnN0OwotICAgIHZvaWQgcmVsb2FkUGFnZSgpOwotCi0gICAgdm9pZCByZXN0b3Jl
SW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9yQ29va2llKTsK
LQotICAgIHZvaWQgaW5zcGVjdChOb2RlKik7Ci0gICAgdm9pZCBoaWdobGlnaHQoTm9kZSopOwot
ICAgIHZvaWQgaGlkZUhpZ2hsaWdodCgpOwotICAgIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShsb25n
IG5vZGVJZCk7Ci0gICAgdm9pZCBoaWRlRE9NTm9kZUhpZ2hsaWdodCgpIHsgaGlkZUhpZ2hsaWdo
dCgpOyB9Ci0KLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKHVuc2lnbmVkIGxvbmcgZnJhbWVJZCk7
Ci0gICAgdm9pZCBoaWRlRnJhbWVIaWdobGlnaHQoKSB7IGhpZGVIaWdobGlnaHQoKTsgfQotCi0g
ICAgdm9pZCBzaG93KCk7Ci0gICAgdm9pZCBzaG93UGFuZWwoY29uc3QgU3RyaW5nJik7Ci0gICAg
dm9pZCBjbG9zZSgpOwotCi0gICAgdm9pZCBjb25uZWN0RnJvbnRlbmQoKTsKLSAgICB2b2lkIHJl
dXNlRnJvbnRlbmQoKTsKLSAgICB2b2lkIGRpc2Nvbm5lY3RGcm9udGVuZCgpOwotICAgIEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQuZ2V0KCk7
IH0KLQotICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKTsKLQotICAg
IEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckFnZW50KCkgeyByZXR1cm4gdGhpczsgfQot
ICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50KCkgeyByZXR1cm4gbV9jb25z
b2xlQWdlbnQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JDU1NBZ2VudCogY3NzQWdlbnQoKSB7IHJl
dHVybiBtX2Nzc0FnZW50LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50
KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQotICAgIEluamVjdGVkU2NyaXB0SG9zdCog
aW5qZWN0ZWRTY3JpcHRBZ2VudCgpIHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgp
OyB9Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50KiBydW50aW1lQWdlbnQoKSB7IHJldHVybiBt
X3J1bnRpbWVBZ2VudC5nZXQoKTsgfQotICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVs
aW5lQWdlbnQoKSB7IHJldHVybiBtX3RpbWVsaW5lQWdlbnQuZ2V0KCk7IH0KLSNpZiBFTkFCTEUo
REFUQUJBU0UpCi0gICAgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCogZGF0YWJhc2VBZ2VudCgpIHsg
cmV0dXJuIG1fZGF0YWJhc2VBZ2VudC5nZXQoKTsgfQotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQotICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCogZG9tU3RvcmFnZUFnZW50KCkg
eyByZXR1cm4gbV9kb21TdG9yYWdlQWdlbnQuZ2V0KCk7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShG
SUxFX1NZU1RFTSkKLSAgICBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQqIGZpbGVTeXN0ZW1BZ2Vu
dCgpIHsgcmV0dXJuIG1fZmlsZVN5c3RlbUFnZW50LmdldCgpOyB9Ci0jZW5kaWYKLSNpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dCogYnJvd3NlckRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2Jyb3dzZXJEZWJ1Z2dl
ckFnZW50LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudC5nZXQoKTsgfQotICAgIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQqIHByb2ZpbGVyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVy
QWdlbnQuZ2V0KCk7IH0KLSNlbmRpZgotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElP
TlMpCi0gICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KiBhcHBsaWNhdGlvbkNhY2hl
QWdlbnQoKSB7IHJldHVybiBtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudC5nZXQoKTsgfQotI2VuZGlm
Ci0KLQotICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0OwotICAgIHZvaWQg
bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIHVuc2lnbmVkIG1v
ZGlmaWVyRmxhZ3MpOwotICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygpOwotCi0gICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChQYXNzT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xp
ZW50PiBjbGllbnQpOwotICAgIGJvb2wgaGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoKSBjb25z
dCB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OyB9Ci0KLSAgICB2b2lkIGRpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSosIERPTVdyYXBwZXJXb3JsZCopOwotCi0gICAg
dm9pZCBkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKik7Ci0KLSAgICB2b2lkIHNldEV4dHJh
SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwotCi0gICAgdm9pZCBzdGFydFRp
bWVsaW5lUHJvZmlsZXIoKTsKLSAgICB2b2lkIHN0b3BUaW1lbGluZVByb2ZpbGVyKCk7Ci0KLSAg
ICB2b2lkIGdldENvb2tpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY29va2llcywgV1RGOjpT
dHJpbmcqIGNvb2tpZXNTdHJpbmcpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pOwotCi0gICAgdm9pZCBtYWluUmVz
b3VyY2VGaXJlZExvYWRFdmVudChEb2N1bWVudExvYWRlciosIGNvbnN0IEtVUkwmKTsKLSAgICB2
b2lkIG1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29u
c3QgS1VSTCYpOwotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgZW51bSBXb3JrZXJBY3Rpb24g
eyBXb3JrZXJDcmVhdGVkLCBXb3JrZXJEZXN0cm95ZWQgfTsKLQotICAgIHZvaWQgcG9zdFdvcmtl
ck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoY29uc3QgSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UmLCBX
b3JrZXJBY3Rpb24pOwotICAgIHZvaWQgZGlkQ3JlYXRlV29ya2VyKGludHB0cl90LCBjb25zdCBT
dHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdvcmtlcik7Ci0gICAgdm9pZCBkaWREZXN0cm95V29y
a2VyKGludHB0cl90KTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHZvaWQg
ZGlkT3BlbkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+LCBjb25zdCBTdHJpbmcmIGRvbWFp
biwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdm9pZCBkaWRVc2VET01TdG9yYWdlKFN0b3Jh
Z2VBcmVhKiBzdG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQotICAgIHZvaWQgZGlkQ3JlYXRlV2Vi
U29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwg
Y29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwotICAgIHZvaWQgd2lsbFNlbmRXZWJTb2NrZXRIYW5k
c2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJl
c3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtl
UmVzcG9uc2UmKTsKLSAgICB2b2lkIGRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcik7Ci0jZW5kaWYKLQotICAgIGJvb2wgaGFzRnJvbnRlbmQoKSBjb25zdCB7IHJldHVy
biBtX2Zyb250ZW5kOyB9Ci0KLSAgICB2b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29u
dGV4dCYpIGNvbnN0OwotICAgIHZvaWQgb3BlbkluSW5zcGVjdGVkV2luZG93KGNvbnN0IFN0cmlu
ZyYgdXJsKTsKLSAgICB2b2lkIGRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdl
YkNvcmU6OlNldHRpbmdzKikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKLSAgICBib29sIGlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGUoKSBjb25zdDsKLSAg
ICB2b2lkIHN0YXJ0UHJvZmlsaW5nKCkgeyBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsg
fQotICAgIHZvaWQgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCBzdG9w
UHJvZmlsaW5nKCkgeyBzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9pZCBz
dG9wVXNlckluaXRpYXRlZFByb2ZpbGluZygpOwotICAgIHZvaWQgZW5hYmxlUHJvZmlsZXIoYm9v
bCBhbHdheXMgPSBmYWxzZSwgYm9vbCBza2lwUmVjb21waWxlID0gZmFsc2UpOwotICAgIHZvaWQg
ZGlzYWJsZVByb2ZpbGVyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwotICAgIGJvb2wgcHJvZmlsZXJF
bmFibGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNob3dBbmRFbmFibGVEZWJ1Z2dlcigpOwotICAg
IHZvaWQgZW5hYmxlRGVidWdnZXIoYm9vbCBhbHdheXMpOwotICAgIHZvaWQgZGlzYWJsZURlYnVn
Z2VyKGJvb2wgYWx3YXlzID0gZmFsc2UpOwotICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9Ci0gICAgdm9pZCByZXN1bWUoKTsKLQotICAg
IHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
Pik7Ci0jZW5kaWYKLQotICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJvbSBjdXN0b20gaW1w
bGVtZW50YXRpb25zLgotICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIHRl
c3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKLQotICAgIHZvaWQgYWRkU2NyaXB0VG9F
dmFsdWF0ZU9uTG9hZChjb25zdCBTdHJpbmcmIHNvdXJjZSk7Ci0gICAgdm9pZCByZW1vdmVBbGxT
Y3JpcHRzVG9FdmFsdWF0ZU9uTG9hZCgpOwotICAgIHZvaWQgc2V0SW5zcGVjdG9yRXh0ZW5zaW9u
QVBJKGNvbnN0IFN0cmluZyYgc291cmNlKTsKLQotICAgIGJvb2wgaW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWQoKTsKLSAgICB2b2lkIHNldEluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKGJvb2wpOwotICAg
IHZvaWQgc2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpOwotICAgIGxvbmcg
aW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBjb25zdDsKLQotICAgIEluc3BlY3RvclN0YXRlKiBz
dGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGUuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JTZXR0aW5ncyog
c2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9Ci0KLSAgICAvLyBJbnNwZWN0
b3JBZ2VudCBBUEkKLSAgICB2b2lkIGdldEluc3BlY3RvclN0YXRlKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+KiBzdGF0ZSk7Ci0gICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxlZChib29sIGVu
YWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKLSAgICB2b2lkIHBvcHVsYXRlU2NyaXB0T2JqZWN0cygp
OwotICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGlu
dGVybmFsbHkuCi0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9v
bCogbmV3U3RhdGUpOwotICAgIHZvaWQgZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KTsKLQotICAgIC8vIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbiBBUEkKLSAgICB2b2lkIGVuc3VyZVNldHRpbmdzTG9hZGVkKCk7Ci0gICAg
dm9pZCB3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0Jik7Ci0KLXByaXZhdGU6Ci0gICAg
dm9pZCBwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKTsKLSAgICB2b2lkIHJlc3RvcmVEZWJ1Z2dl
cigpOwotICAgIGVudW0gUHJvZmlsZXJSZXN0b3JlQWN0aW9uIHsKLSAgICAgICAgUHJvZmlsZXJS
ZXN0b3JlTm9BY3Rpb24gPSAwLAotICAgICAgICBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50ID0g
MQotICAgIH07Ci0gICAgdm9pZCByZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlQWN0aW9u
IGFjdGlvbik7Ci0gICAgdm9pZCB1bmJpbmRBbGxSZXNvdXJjZXMoKTsKLSAgICB2b2lkIHNldFNl
YXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKLQotICAgIHZvaWQgcmVsZWFzZUZyb250ZW5k
TGlmZXRpbWVBZ2VudHMoKTsKLQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAg
IHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwotI2VuZGlmCi0KLSAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJik7Ci0g
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhh
c2hTZXQ8Q29va2llPiYpOwotCi0gICAgdm9pZCBmb2N1c05vZGUoKTsKLSAgICBib29sIGlzTWFp
blJlc291cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVl
c3RVcmwpOwotCi0gICAgUGFnZSogbV9pbnNwZWN0ZWRQYWdlOwotICAgIEluc3BlY3RvckNsaWVu
dCogbV9jbGllbnQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2xpZW50OwotICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7Ci0gICAgT3du
UHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwotICAgIE93blB0cjxJbnNwZWN0b3JD
U1NBZ2VudD4gbV9jc3NBZ2VudDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9t
QWdlbnQ7Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ+IG1fZGF0YWJhc2VBZ2VudDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQotICAgIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ+IG1fZG9tU3RvcmFnZUFn
ZW50OwotI2VuZGlmCi0KLSAgICBPd25QdHI8SW5zcGVjdG9yVGltZWxpbmVBZ2VudD4gbV90aW1l
bGluZUFnZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JTdGF0ZT4gbV9zdGF0ZTsKLSAgICBPd25Q
dHI8SW5zcGVjdG9yU2V0dGluZ3M+IG1fc2V0dGluZ3M7Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQotICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ+IG1fYXBwbGljYXRpb25DYWNoZUFnZW50OwotI2VuZGlmCi0gICAgCi0jaWYgRU5BQkxFKEZJ
TEVfU1lTVEVNKQotICAgIFJlZlB0cjxJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ+IG1fZmlsZVN5
c3RlbUFnZW50OwotI2VuZGlmIAotCi0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRvRm9jdXM7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlQWdlbnQ+IG1fcmVzb3VyY2VBZ2VudDsKLSAgICBP
d25QdHI8SW5zcGVjdG9yUnVudGltZUFnZW50PiBtX3J1bnRpbWVBZ2VudDsKLQotI2lmIEVOQUJM
RShEQVRBQkFTRSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW5zcGVjdG9yRGF0
YWJhc2VSZXNvdXJjZT4gPiBEYXRhYmFzZVJlc291cmNlc01hcDsKLSAgICBEYXRhYmFzZVJlc291
cmNlc01hcCBtX2RhdGFiYXNlUmVzb3VyY2VzOwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9S
QUdFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2U+ID4gRE9NU3RvcmFnZVJlc291cmNlc01hcDsKLSAgICBET01TdG9yYWdlUmVzb3Vy
Y2VzTWFwIG1fZG9tU3RvcmFnZVJlc291cmNlczsKLSNlbmRpZgotCi0gICAgU3RyaW5nIG1fc2hv
d0FmdGVyVmlzaWJsZTsKLSAgICBSZWZQdHI8Tm9kZT4gbV9oaWdobGlnaHRlZE5vZGU7Ci0gICAg
T3duUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBtX2luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOwotICAgIFJlZlB0cjxJbmplY3RlZFNjcmlwdEhvc3Q+IG1faW5qZWN0ZWRTY3JpcHRI
b3N0OwotICAgIE93blB0cjxJbnNwZWN0b3JDb25zb2xlQWdlbnQ+IG1fY29uc29sZUFnZW50Owot
Ci0gICAgVmVjdG9yPHBhaXI8bG9uZywgU3RyaW5nPiA+IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENv
bW1hbmRzOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQ7Ci0g
ICAgU3RyaW5nIG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJOwotI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQotICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsKLSAgICBPd25Q
dHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gbV9kZWJ1Z2dlckFnZW50OwotICAgIE93blB0cjxJ
bnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudD4gbV9icm93c2VyRGVidWdnZXJBZ2VudDsKLSAg
ICBPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gbV9wcm9maWxlckFnZW50OwotI2VuZGlm
Ci0gICAgT3duUHRyPEhUVFBIZWFkZXJNYXA+IG1fZXh0cmFIZWFkZXJzOwotI2lmIEVOQUJMRShX
T1JLRVJTKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgUmVmUHRyPEluc3BlY3Rvcldv
cmtlclJlc291cmNlPiA+IFdvcmtlcnNNYXA7Ci0KLSAgICBXb3JrZXJzTWFwIG1fd29ya2VyczsK
LSNlbmRpZgogfTsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfQogCiAjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDM2YmNhYjguLjM4NTQwMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZUFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRhdGFiYXNl
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvclZhbHVlcy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGFjZmJiNmUuLjJmZmFhODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAg
LTQwLDE4ICs0MCwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVj
dG9yRnJvbnRlbmQqIGZyb250ZW5kKQogewotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50PiBhZ2VudCA9IGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KGluc3BlY3Rv
ckNvbnRyb2xsZXIsIGZyb250ZW5kKSk7CisgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ+IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoaW5zcGVjdG9y
QWdlbnQsIGZyb250ZW5kKSk7CiAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmNsZWFy
QnJlYWtwb2ludHMoKTsKICAgICAvLyBGSVhNRShXSzQ0NTEzKTogYnJlYWtwb2ludHMgYWN0aXZh
dGVkIGZsYWcgc2hvdWxkIGJlIHN5bmNocm9uaXplZCBiZXR3ZWVuIGFsbCBmcm9udC1lbmRzCiAg
ICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKHRy
dWUpOwotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRMaXN0ZW5lcihhZ2VudC5n
ZXQoKSwgaW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpKTsKKyAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuYWRkTGlzdGVuZXIoYWdlbnQuZ2V0KCksIGluc3BlY3RvckFn
ZW50LT5pbnNwZWN0ZWRQYWdlKCkpOwogICAgIHJldHVybiBhZ2VudC5yZWxlYXNlKCk7CiB9CiAK
LUluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9y
Q29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCitJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIDog
bV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRl
bmQpCiAgICAgLCBtX3BhdXNlZFNjcmlwdFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3JpcHRQYXVz
ZVNjaGVkdWxlZChmYWxzZSkKQEAgLTYwLDcgKzYwLDcgQEAgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JD
b24KIAogSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6fkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKQog
ewotICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVMaXN0ZW5lcih0aGlzLCBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKSk7CisgICAgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUxpc3RlbmVyKHRoaXMsIG1faW5zcGVjdG9yQWdlbnQtPmlu
c3BlY3RlZFBhZ2UoKSk7CiAgICAgbV9wYXVzZWRTY3JpcHRTdGF0ZSA9IDA7CiB9CiAKQEAgLTE3
NSwxNCArMTc1LDE0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4
Y2VwdGlvbnNTdGF0ZShsb25nIHBhdXNlU3RhdGUsIGxvbmcqIG5lCiAKIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewotICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbmpl
Y3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjYWxsRnJhbWVJZC5n
ZXQoKSk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckFn
ZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjYWxs
RnJhbWVJZC5nZXQoKSk7CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAg
ICAgICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCByZXN1bHQpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmdldENvbXBsZXRpb25zT25DYWxsRnJhbWUoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGJvb2wgaW5jbHVk
ZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
CiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNh
bGxGcmFtZUlkLmdldCgpKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvck9i
amVjdElkKGNhbGxGcmFtZUlkLmdldCgpKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29tcGxldGlvbnNPbkNhbGxGcmFt
ZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgaW5jbHVkZUluc3BlY3RvckNvbW1hbmRMaW5lQVBJ
LCByZXN1bHQpOwogfQpAQCAtMTk4LDcgKzE5OCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmN1cnJlbnRDYWxsRnJhbWVzKCkKIHsKICAgICBp
ZiAoIW1fcGF1c2VkU2NyaXB0U3RhdGUpCiAgICAgICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpOwotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JD
b250cm9sbGVyLT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3IobV9wYXVz
ZWRTY3JpcHRTdGF0ZSk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
c3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+aW5qZWN0ZWRTY3JpcHRGb3IobV9w
YXVzZWRTY3JpcHRTdGF0ZSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIEluc3BlY3Rv
clZhbHVlOjpudWxsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAppbmRleCA0Y2I5ZjljLi5jMTZiMzhmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQyLDcgKzQy
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0Owot
Y2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0
b3JWYWx1ZTsKQEAgLTU2LDcgKzU2LDcgQEAgZW51bSBEZWJ1Z2dlckV2ZW50VHlwZSB7CiBjbGFz
cyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIFNjcmlwdERlYnVnTGlzdGVuZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciosIEluc3BlY3RvckZy
b250ZW5kKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4g
Y3JlYXRlKEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCk7CiAKICAgICBzdGF0aWMgYm9vbCBpc0RlYnVnZ2Vy
QWx3YXlzRW5hYmxlZCgpOwpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVh
ckZvclBhZ2VOYXZpZ2F0aW9uKCk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudChJbnNwZWN0b3JDb250cm9sbGVyKiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsK
IAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGN1cnJlbnRDYWxsRnJhbWVzKCk7CiAK
QEAgLTk1LDcgKzk1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVzdG9yZUJyZWFrcG9pbnQo
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5n
JiBjb25kaXRpb24sIGJvb2wgZW5hYmxlZCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBt
X2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdl
bnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiAgICAgU2NyaXB0U3RhdGUq
IG1fcGF1c2VkU2NyaXB0U3RhdGU7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9zY3Jp
cHRJRFRvQ29udGVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JGaWxlU3lzdGVtQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAKaW5kZXggMmEwZGYzYy4uNDY3Yzk3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5j
cHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJGaWxlU3lzdGVtQ2FsbGJhY2tzLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkxvY2FsRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgU3RyaW5nJiwgUGFzc093blB0cjxBc3luY0Zp
bGVTeXN0ZW0+IGZpbGVTeXN0ZW0pCiAgICAgewotICAgICAgICAvLyBBZ2VudCB3aWxsIGJlIGFs
aXZlIGV2ZW4gaWYgSW5zcGVjdG9yQ29udHJvbGxlciBpcyBkZXN0cm95ZWQgdW50aWwgY2FsbGJh
Y2sgaXMgcnVuLgorICAgICAgICAvLyBBZ2VudCB3aWxsIGJlIGFsaXZlIGV2ZW4gaWYgSW5zcGVj
dG9yQWdlbnQgaXMgZGVzdHJveWVkIHVudGlsIGNhbGxiYWNrIGlzIHJ1bi4KICAgICAgICAgbV9h
Z2VudC0+ZGlkR2V0RmlsZVN5c3RlbVBhdGgoZmlsZVN5c3RlbS0+cm9vdCgpLCBtX3R5cGUsIG1f
b3JpZ2luKTsKICAgICB9CiAKQEAgLTEwNSw4ICsxMDUsOCBAQCBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX29yaWdpbjsKIH07CiAKLUluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6SW5zcGVjdG9yRmls
ZVN5c3RlbUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihp
bnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpJbnNwZWN0b3JG
aWxlU3lzdGVtQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JG
cm9udGVuZCogZnJvbnRlbmQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50
KQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKIHsKIH0KQEAgLTExNSw3ICsxMTUsNyBAQCBJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6On5JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoKSB7IH0K
IAogdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OnN0b3AoKQogewotICAgIG1faW5zcGVj
dG9yQ29udHJvbGxlciA9IDA7CisgICAgbV9pbnNwZWN0b3JBZ2VudCA9IDA7CiB9CiAKICNpZiBQ
TEFURk9STShDSFJPTUlVTSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudDo6Z2V0RmlsZVN5c3RlbVBhdGhBc3luYyh1bnNpZ25lZCBpbnQgdHlwZSwgY29u
c3QgUwogICAgIH0KIAogICAgIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSBhc3luY0ZpbGVTeXN0ZW1U
eXBlID0gc3RhdGljX2Nhc3Q8QXN5bmNGaWxlU3lzdGVtOjpUeXBlPih0eXBlKTsKLSAgICBGcmFt
ZSogbWFpbkZyYW1lID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1h
aW5GcmFtZSgpOworICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX2luc3BlY3RvckFnZW50LT5pbnNw
ZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpOwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZy
YW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYg
KGRvY3VtZW50ICYmIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpID09IG9y
aWdpbikgewpAQCAtMTUxLDggKzE1MSw4IEBAIHZvaWQgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
OjpnZXRGaWxlU3lzdGVtUGF0aEFzeW5jKHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCBTCiAKIHZv
aWQgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpkaWRHZXRGaWxlU3lzdGVtUGF0aChjb25zdCBT
dHJpbmcmIHJvb3QsIEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIG9y
aWdpbikKIHsKLSAgICAvLyBXaGVuIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGVzdHJveWVkLCB0aGlz
IGlzIHNldCB0byAwLiBBZ2VudCBjYW4gbGl2ZSBldmVuIGFmdGVyIG1faW5zcGVjdG9yQ29udHJv
bGxlciBpcyBkZXN0cm95ZWQuCi0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAg
Ly8gV2hlbiBjb250cm9sbGVyIGlzIGJlaW5nIGRlc3Ryb3llZCwgdGhpcyBpcyBzZXQgdG8gMC4g
QWdlbnQgY2FuIGxpdmUgZXZlbiBhZnRlciBtX2luc3BlY3RvckFnZW50IGlzIGRlc3Ryb3llZC4K
KyAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZnJv
bnRlbmQtPmRpZEdldEZpbGVTeXN0ZW1QYXRoKHJvb3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4odHlwZSksIG9yaWdpbik7CkBAIC0xNjAsOCArMTYwLDggQEAgdm9pZCBJbnNwZWN0b3JGaWxl
U3lzdGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1QYXRoKGNvbnN0IFN0cmluZyYgcm9vdCwgQXN5
bmNGaWwKIAogdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1F
cnJvcihBc3luY0ZpbGVTeXN0ZW06OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCiB7
Ci0gICAgLy8gV2hlbiBjb250cm9sbGVyIGlzIGJlaW5nIGRlc3Ryb3llZCwgdGhpcyBpcyBzZXQg
dG8gMC4gQWdlbnQgY2FuIGxpdmUgZXZlbiBhZnRlciBtX2luc3BlY3RvckNvbnRyb2xsZXIgaXMg
ZGVzdHJveWVkLgotICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgIC8vIFdoZW4g
Y29udHJvbGxlciBpcyBiZWluZyBkZXN0cm95ZWQsIHRoaXMgaXMgc2V0IHRvIDAuIEFnZW50IGNh
biBsaXZlIGV2ZW4gYWZ0ZXIgbV9pbnNwZWN0b3JBZ2VudCBpcyBkZXN0cm95ZWQuCisgICAgaWYg
KCFtX2luc3BlY3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAgICAgbV9mcm9udGVuZC0+ZGlk
R2V0RmlsZVN5c3RlbUVycm9yKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odHlwZSksIG9yaWdp
bik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmls
ZVN5c3RlbUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5
c3RlbUFnZW50LmgKaW5kZXggYTg1YWQwZi4uYjk5NWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaApAQCAtNDAsMTUgKzQw
LDE1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9y
RnJvbnRlbmQ7CiBjbGFzcyBMb2NhbEZpbGVTeXN0ZW07CiAKIGNsYXNzIEluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudD4g
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckZpbGVTeXN0ZW1BZ2Vu
dD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3Bl
Y3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JG
aWxlU3lzdGVtQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdlbnQsIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIsIGZyb250
ZW5kKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRmlsZVN5c3RlbUFn
ZW50KGluc3BlY3RvckFnZW50LCBmcm9udGVuZCkpOwogICAgIH0KIAogICAgIH5JbnNwZWN0b3JG
aWxlU3lzdGVtQWdlbnQoKTsKQEAgLTY0LDEwICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWRHZXRGaWxlU3lzdGVtRGlzYWJsZWQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JGaWxl
U3lzdGVtQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciosIEluc3BlY3RvckZyb250ZW5kKik7Cisg
ICAgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50KEluc3BlY3RvckFnZW50KiwgSW5zcGVjdG9yRnJv
bnRlbmQqKTsKICAgICB2b2lkIGdldEZpbGVTeXN0ZW1Sb290KEFzeW5jRmlsZVN5c3RlbTo6VHlw
ZSk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7Cisg
ICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRl
bmQqIG1fZnJvbnRlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCmluZGV4IDM0MmFmMGYuLjE3OTYyNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIaXRU
ZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBA
IC0yMDAsNyArMjAxLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6Om1vdmVXaW5kb3dC
eShmbG9hdCB4LCBmbG9hdCB5KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6
c2V0RXh0ZW5zaW9uQVBJKGNvbnN0IFN0cmluZyYgc2NyaXB0KQogewotICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvciA9IG1fZnJvbnRlbmRQYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCk7CisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvciA9IG1fZnJvbnRlbmRQYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCk7CiAgICAgaW5zcGVjdG9yLT5zZXRJbnNwZWN0b3JFeHRlbnNpb25B
UEkoc2NyaXB0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDhjNGYyOGYuLmU3MTk4YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKQEAg
LTMzLDggKzMzLDggQEAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxF
KElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIgotI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTU2LDE0ICs1
NiwxNCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVXNlckluaXRpYXRlZFByb2ZpbGVOYW1l
ID0gIm9yZy53ZWJraXQucHJvZmlsZXMudXNlci1pbgogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IENQVVByb2ZpbGVUeXBlID0gIkNQVSI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgSGVhcFBy
b2ZpbGVUeXBlID0gIkhFQVAiOwogCi1QYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+
IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNw
ZWN0b3JDb250cm9sbGVyKQorUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
KQogewotICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBhZ2VudCA9IGFkb3B0UHRy
KG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3BlY3RvckNvbnRyb2xsZXIpKTsKKyAgICBP
d25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudChpbnNwZWN0b3JBZ2VudCkpOwogICAgIHJldHVybiBhZ2VudC5yZWxl
YXNlKCk7CiB9CiAKLUluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdl
bnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICA6IG1faW5z
cGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yQWdl
bnQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwgbV9mcm9u
dGVuZCgwKQogICAgICwgbV9lbmFibGVkKFNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlz
RW5hYmxlZCgpKQogICAgICwgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZShmYWxzZSkK
QEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRQcm9maWxl
RmluaXNoZWRNZXNzYWdlVG9Db25zb2xlKFBhc3NSZWZQdHI8U2NyaXAKICAgICBSZWZQdHI8U2Ny
aXB0UHJvZmlsZT4gcHJvZmlsZSA9IHBycFByb2ZpbGU7CiAgICAgU3RyaW5nIHRpdGxlID0gcHJv
ZmlsZS0+dGl0bGUoKTsKICAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoIlByb2ZpbGUg
XCJ3ZWJraXQtcHJvZmlsZTovLyIsIENQVVByb2ZpbGVUeXBlLCAnLycsIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXModGl0bGUpLCAnIycsIFN0cmluZzo6bnVtYmVyKHByb2ZpbGUtPnVpZCgp
KSwgIlwiIGZpbmlzaGVkLiIpOwotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y29uc29sZUFn
ZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAg
IG1faW5zcGVjdG9yQWdlbnQtPmNvbnNvbGVBZ2VudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwg
bGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50
OjphZGRTdGFydFByb2ZpbGluZ01lc3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjphZGRTdGFydFByb2ZpbGluZ01l
c3NhZ2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiB0aXQKICAgICBpZiAoIW1fZnJvbnRlbmQpCiAg
ICAgICAgIHJldHVybjsKICAgICBTdHJpbmcgbWVzc2FnZSA9IG1ha2VTdHJpbmcoIlByb2ZpbGUg
XCJ3ZWJraXQtcHJvZmlsZTovLyIsIENQVVByb2ZpbGVUeXBlLCAnLycsIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXModGl0bGUpLCAiIzBcIiBzdGFydGVkLiIpOwotICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+Y29uc29sZUFnZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVt
YmVyLCBzb3VyY2VVUkwpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPmNvbnNvbGVBZ2VudCgpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIExvZ01l
c3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKIH0KIAogUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZVByb2Zp
bGVIZWFkZXIoY29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmlsZSkKQEAgLTIzNSw3ICsyMzUsNyBA
QCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpCiAgICAgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSA9IHRydWU7CiAgICAgU3Ry
aW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSh0cnVlKTsKICNp
ZiBVU0UoSlNDKQotICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5k
b3cobV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLCBk
ZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlw
dFN0YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRQYWdlKCkt
Pm1haW5GcmFtZSgpLCBkZWJ1Z2dlcldvcmxkKCkpLT5nbG9iYWxFeGVjKCk7CiAjZWxzZQogICAg
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IDA7CiAjZW5kaWYKQEAgLTI1MSw3ICsyNTEsNyBA
QCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KGJvb2wgaWdub3JlUHJvZmlsZSkKICAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
ID0gZmFsc2U7CiAgICAgU3RyaW5nIHRpdGxlID0gZ2V0Q3VycmVudFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZSgpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0YXRl
ID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+
bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdG9yQWdlbnQtPmlu
c3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMo
KTsKICNlbHNlCiAgICAgLy8gVXNlIG51bGwgc2NyaXB0IHN0YXRlIHRvIGF2b2lkIGZpbHRlcmlu
ZyBieSBjb250ZXh0IHNlY3VyaXR5IHRva2VuLgogICAgIC8vIEFsbCBmdW5jdGlvbnMgZnJvbSBh
bGwgaWZyYW1lcyBzaG91bGQgYmUgdmlzaWJsZSBmcm9tIEluc3BlY3RvciBVSS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCmluZGV4IDQz
NmFlNTEuLjA5ZGU3MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNDEsNyArNDEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Citj
bGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5z
cGVjdG9yT2JqZWN0OwogY2xhc3MgU2NyaXB0SGVhcFNuYXBzaG90OwpAQCAtNTAsNyArNTAsNyBA
QCBjbGFzcyBTY3JpcHRQcm9maWxlOwogY2xhc3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCk7IFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50
Kik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yUHJvZmlsZXJBZ2VudCgpOwogCiAgICAgdm9pZCBh
ZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJwUHJvZmlsZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpAQCAtNzcsMTEgKzc3LDExIEBA
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlw
dFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGlu
dCwgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gPiBIZWFwU25hcHNob3RzTWFwOwogCi0gICAg
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKik7CisgICAgSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JBZ2VudCopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2Zp
bGUpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTbmFwc2hvdEhlYWRl
cihjb25zdCBTY3JpcHRIZWFwU25hcHNob3QmIHNuYXBzaG90KTsKIAotICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JBZ2VudCogbV9p
bnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKICAgICBi
b29sIG1fZW5hYmxlZDsKICAgICBib29sIG1fcmVjb3JkaW5nVXNlckluaXRpYXRlZFByb2ZpbGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCmluZGV4IGFlYzViNDUuLjFhMDM4MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTEtMDEtMjIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IGZpcnN0IHN0ZXAgb2Ygc3BsaXR0aW5nIEluc3BlY3RvckNvbnRyb2xs
ZXIuCisKKyAgICAgICAgI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIgd2FzIGFkZGVk
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjk1
NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2VydmVyUXQuY3BwOgorCiAy
MDExLTAxLTIxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAppbmRleCA3MDAyZGNlLi5iYWQyNmE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZl
clF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNl
cnZlclF0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRRdC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJNRDUuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIK
</data>
<flag name="review"
          id="71279"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79864</attachid>
            <date>2011-01-23 00:32:20 -0800</date>
            <delta_ts>2011-01-24 12:33:44 -0800</delta_ts>
            <desc>[PATCH] More user-friendly diff (shows diff in copy)</desc>
            <filename>rename_ic_2</filename>
            <type>text/plain</type>
            <size>169962</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTVkODc5MC4uMDVkYTViYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTExNTMsNiArMTE1Myw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCisgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNw
cAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiZDgz
MDQ4Li5mZTE0M2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI5IEBACisyMDExLTAxLTIyICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBuZXQgc3RlcCBp
biBzcGxpdHRpbmcgSW5zcGVjdG9yQ29udHJvbGxlci4KKworICAgICAgICBTcGxpdHRpbmcgSW5z
cGVjdG9yQ29udHJvbGxlciBpcyBhIGJpdCB0cmlja3kgcHJvY2Vzcy4KKworICAgICAgICBBcyBh
IGZpcnN0IHN0ZXAgSSdsbCBkbyB0aGUgbmV4dCB0aGluZ3M6CisgICAgICAgIDEpIHJlbmFtZSBl
eGlzdGluZyBJbnNwZWN0b3JDb250cm9sbGVyIHRvIEluc3BlY3RvckFnZW50OworICAgICAgICAy
KSBzL25zcGVjdG9yQ29udHJvbGxlci9uc3BlY3RvckFnZW50L2cgZXZlcnl3aGVyZSBpbiBXZWJD
b3JlL2luc3BlY3RvciBidXQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOworICAgICAgICAzKSBj
cmVhdGUgYSBmYWtlIEluc3BlY3RvckNvbnRyb2xsZXIgZGVyaXZlZCBmcm9tIHRoZSBJbnNwZWN0
b3JBZ2VudCBmb3IgdGhlIHJlc3Qgb2YgV2ViQ29yZSBhbmQgV2ViS2l0OworCisgICAgICAgIFRo
ZSBzZWNvbmQgc3RlcCBpcyBhIG1pZ3JhdGlvbiBvZiBhIHNtYWxsIHNldCBvZiBmdW5jdGlvbnMg
ZGVzY3JpYmVkIGluIGJ1ZyA1MjUxMCBmcm9tIEluc3BlY3RvckFnZW50IHRvIEluc3BlY3RvckNv
bnRyb2xsZXIuCisKKyAgICAgICAgQXMgZmFyIGFzIHRoZSBzZWNvbmQgc3RlcCB3aWxsIGhhdmUg
c2lnbmlmaWNhbnQgY2hhbmdlcyBpbiB0aGUgZnVuY3Rpb25zJyBpbXBsZW1lbnRhdGlvbiBJJ2xs
IGRvIGl0IGFzIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyOTU1CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICog
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3Jp
cHRIb3N0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5qZWN0ZWRTY3JpcHRIb3N0
Ojpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNl
bGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVkU2NyaXB0
SG9zdDo6bm9kZUZvcklkQ2FsbGJhY2spOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnBtOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpJbmplY3RlZFNjcmlw
dEhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpjbGVhckNvbnNv
bGVNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmRhdGFi
YXNlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RE
YXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERP
TVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3Rl
ZFNjcmlwdEZvck1haW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhv
c3Q6Omluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0
SG9zdDo6ZnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpk
aWRDcmVhdGVXb3JrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0Ojpk
aWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3RvckFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6ZGlzY29ubmVjdENvbnRyb2xsZXIpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpJbnNwZWN0b3JBZ2VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JBZ2VudDo6fkluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjppbnNwZWN0ZWRQYWdlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjplbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQWdlbnQ6OnNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0b3JBdHRhY2hlZEhlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNv
b2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6Zm9jdXNOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckFnZW50OjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OmhpZ2hsaWdodERPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6OmhpZ2hsaWdodEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
OjpoaWRlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojptb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
aGFuZGxlTW91c2VQcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JBZ2VudDo6Y29ubmVjdEZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzaG93UGFu
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmNsb3NlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaXNjb25uZWN0RnJvbnRlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc291cmNlQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZURlYnVnZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlUHJvZmlsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnVuYmluZEFsbFJlc291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6bWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om1haW5SZXNvdXJjZUZpcmVkTG9hZEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojppc01haW5SZXNvdXJjZUxv
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbnN1cmVTZXR0aW5nc0xvYWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c3RhcnRUaW1lbGluZVByb2Zp
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wVGltZWxpbmVQcm9m
aWxlcik6CisgICAgICAgIChXZWJDb3JlOjpQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVu
ZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3N0V29ya2VyTm90aWZpY2F0aW9u
VG9Gcm9udGVuZFRhc2s6OlBvc3RXb3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OnBl
cmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpwb3N0V29ya2Vy
Tm90aWZpY2F0aW9uVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6ZGlkQ3JlYXRlV29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpk
aWREZXN0cm95V29ya2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRP
cGVuRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmdldENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpidWlsZE9iamVjdEZvckNv
b2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRVc2VET01TdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFuZHNoYWtl
UmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlkUmVjZWl2ZVdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpkaWRDbG9zZVdlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2Vu
dDo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JBZ2VudDo6c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cHJvZmlsZXJFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjplbmFibGVQcm9maWxlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZVByb2ZpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckFnZW50OjpkaXNhYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0
QWxsQnJvd3NlckJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50
OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50OjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OnF1YWRUb1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd091dGxpbmVkUXVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkV2l0aENsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6ZHJhd0hpZ2hsaWdodEZvckJveCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3SGlnaGxpZ2h0
Rm9yTGluZUJveGVzT3JTVkdSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0RnJv
bUZyYW1lVG9NYWluRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVUb01haW5GcmFtZU9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZHJhd05vZGVIaWdobGln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Om9wZW5Jbkluc3BlY3RlZFdpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6YWRkU2NyaXB0VG9FdmFsdWF0
ZU9uTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OnNldEluc3BlY3RvckV4dGVuc2lvbkFQSSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JB
Z2VudDo6aW5zcGVjdGVkVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpy
ZWxvYWRQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzZXRFeHRyYUhl
YWRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oLgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjppbnNwZWN0b3JDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmluamVjdGVkU2NyaXB0SG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aGlkZURPTU5vZGVIaWdobGlnaHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmhpZGVGcmFtZUhpZ2hsaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6Omluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6Omluc3BlY3RvckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckFnZW50Ojpjb25zb2xlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6
OmNzc0FnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpkb21BZ2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6aW5qZWN0ZWRTY3JpcHRBZ2VudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cnVudGltZUFnZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojp0aW1lbGluZUFnZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpkYXRhYmFzZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckFnZW50Ojpkb21TdG9yYWdlQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQWdlbnQ6OmZpbGVTeXN0ZW1BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6YnJvd3NlckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQWdlbnQ6OmRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdl
bnQ6OnByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmFw
cGxpY2F0aW9uQ2FjaGVBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6
aGFzSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6Omhhc0Zyb250ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50Ojpz
dGFydFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c3RvcFBy
b2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6ZGVidWdnZXJFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzdGF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6c2V0dGluZ3MpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
OjpnZXRBcHBsaWNhdGlvbkNhY2hlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OnJl
c3RvcmVTdGlja3lCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9N
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6
d2lsbFJlbW92ZURPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQnJvd3NlckRl
YnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpwYXVzZU9uTmF0aXZl
RXZlbnRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNv
bGVBZ2VudDo6SW5zcGVjdG9yQ29uc29sZUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6fkluc3BlY3RvckNvbnNvbGVBZ2VudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc291cmNlUmV0cmll
dmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb25zb2xl
QWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRDb25zb2xlTWVzc2FnZXNFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2Up
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojp+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldENvbXBsZXRpb25zT25DYWxsRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxGcmFtZXMp
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnRDYWxsYmFja3M6OmRpZE9wZW5GaWxlU3lzdGVt
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6SW5zcGVjdG9y
RmlsZVN5c3RlbUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZpbGVTeXN0ZW1B
Z2VudDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6
OmdldEZpbGVTeXN0ZW1QYXRoQXN5bmMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRmls
ZVN5c3RlbUFnZW50OjpkaWRHZXRGaWxlU3lzdGVtUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmRpZEdldEZpbGVTeXN0ZW1FcnJvcik6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmRIb3N0OjpzZXRFeHRlbnNpb25BUEkpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clByb2ZpbGVyQWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6YWRkU3RhcnRQcm9maWxpbmdN
ZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdl
bnQ6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpzdG9wVXNlckluaXRpYXRlZFByb2ZpbGluZyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaDoKKwogMjAxMS0wMS0yMiAgQ2hy
aXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVk
IGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzMxMmFmMS4uN2Fh
YzBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTE5NTEsNiArMTk1MSw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAorCVNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KaW5kZXggMjUwYjYyOS4uZWFiY2FhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEz
NTYsMjkgKzEzNTYsMjUgQEAgX19aTjdXZWJDb3JlMjJHZW9sb2NhdGlvblNlcnZpY2VNb2NrOHNl
dEVycm9yRU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzUG9zaXRpb25FcnIKICNlbmRpZgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQ0c2hvd0V2Citf
X1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50NWNsb3NlRXYKK19fWk43V2ViQ29yZTE0SW5zcGVj
dG9yQWdlbnQ5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDEyQ29uc29sZVBhbmVsRQorX19aTjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDEzUHJv
ZmlsZXNQYW5lbEUKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9yQWdlbnQxNGVuYWJsZVByb2ZpbGVy
RWJiCitfX1pON1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTVkaXNhYmxlRGVidWdnZXJFYgorX19a
TjdXZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDE1ZGlzYWJsZVByb2ZpbGVyRWIKK19fWk43V2ViQ29y
ZTE0SW5zcGVjdG9yQWdlbnQxOGRpc2Nvbm5lY3RGcm9udGVuZEV2CitfX1pON1dlYkNvcmUxNElu
c3BlY3RvckFnZW50MjBzdG9wVGltZWxpbmVQcm9maWxlckV2CitfX1pON1dlYkNvcmUxNEluc3Bl
Y3RvckFnZW50MjFzaG93QW5kRW5hYmxlRGVidWdnZXJFdgorX19aTjdXZWJDb3JlMTRJbnNwZWN0
b3JBZ2VudDIxc3RhcnRUaW1lbGluZVByb2ZpbGVyRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQyM2luc3BlY3RvclN0YXJ0c0F0dGFjaGVkRXYKK19fWk43V2ViQ29yZTE0SW5zcGVjdG9y
QWdlbnQyNWV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmRFbFJLTjNXVEY2U3RyaW5nRQorX19aTjdX
ZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYx
MFBhc3NPd25QdHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQorX19aTjdXZWJDb3Jl
MTRJbnNwZWN0b3JBZ2VudDI2c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWRFYgorX19aTjdXZWJD
b3JlMTRJbnNwZWN0b3JBZ2VudDI2c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmdFdgorX19aTjdX
ZWJDb3JlMTRJbnNwZWN0b3JBZ2VudDI3c3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nRXYKIF9f
Wk43V2ViQ29yZTE1SW5zcGVjdG9yQ2xpZW50MzFkb0Rpc3BhdGNoTWVzc2FnZU9uRnJvbnRlbmRQ
YWdlRVBOU180UGFnZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29u
dHJvbGxlcjEyQ29uc29sZVBhbmVsRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVy
MTJTY3JpcHRzUGFuZWxFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxM1Byb2Zp
bGVzUGFuZWxFCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMXNob3dBbmRFbmFi
bGVEZWJ1Z2dlckV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNGVuYWJsZVBy
b2ZpbGVyRWJiCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVEZWJ1
Z2dlckViCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxNWRpc2FibGVQcm9maWxl
ckViCi1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxOGRpc2Nvbm5lY3RGcm9udGVu
ZEV2Ci1fX1pON1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyMHN0b3BUaW1lbGluZVByb2Zp
bGVyRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIxc3RhcnRUaW1lbGluZVBy
b2ZpbGVyRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjIzaW5zcGVjdG9yU3Rh
cnRzQXR0YWNoZWRFdgotX19aTjdXZWJDb3JlMTlJbnNwZWN0b3JDb250cm9sbGVyMjVldmFsdWF0
ZUZvclRlc3RJbkZyb250ZW5kRWxSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE5SW5zcGVj
dG9yQ29udHJvbGxlcjI2c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRFTjNXVEYxMFBhc3NPd25Q
dHJJTlNfMjNJbnNwZWN0b3JGcm9udGVuZENsaWVudEVFRQotX19aTjdXZWJDb3JlMTlJbnNwZWN0
b3JDb250cm9sbGVyMjZzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZEViCi1fX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXIyN3N0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ0V2Ci1fX1pO
N1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIyNnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
RXYKLV9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIzMWlzUmVjb3JkaW5nVXNlcklu
aXRpYXRlZFByb2ZpbGVFdgotX19aTks3V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjE1cHJv
ZmlsZXJFbmFibGVkRXYKLV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjRzaG93RXYK
LV9fWk43V2ViQ29yZTE5SW5zcGVjdG9yQ29udHJvbGxlcjVjbG9zZUV2Ci1fX1pON1dlYkNvcmUx
OUluc3BlY3RvckNvbnRyb2xsZXI3aW5zcGVjdEVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXI5c2hvd1BhbmVsRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTJtb3ZlV2luZG93QnlFZmYKIF9fWk43V2Vi
Q29yZTI4SW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDE0ZnJvbnRlbmRMb2FkZWRFdgogX19a
TjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsMTVjYW5BdHRhY2hXaW5kb3dF
dgpAQCAtMTM5MCw4ICsxMzg2LDkgQEAgX19aTjdXZWJDb3JlMjhJbnNwZWN0b3JGcm9udGVuZENs
aWVudExvY2FsMjZjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodEVqCiBfX1pON1dlYkNvcmUyOElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwyN3Jlc3RvcmVBdHRhY2hlZFdpbmRvd0hlaWdodEV2
CiBfX1pON1dlYkNvcmUyOEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxDMkVQTlNfMTlJbnNw
ZWN0b3JDb250cm9sbGVyRVBOU180UGFnZUUKIF9fWk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbEQyRXYKLV9fWk5LN1dlYkNvcmUxOUluc3BlY3RvckNvbnRyb2xsZXIxN2Ry
YXdOb2RlSGlnaGxpZ2h0RVJOU18xNUdyYXBoaWNzQ29udGV4dEUKLV9fWk5LN1dlYkNvcmUxOUlu
c3BlY3RvckNvbnRyb2xsZXI3ZW5hYmxlZEV2CitfX1pOSzdXZWJDb3JlMTRJbnNwZWN0b3JBZ2Vu
dDE1cHJvZmlsZXJFbmFibGVkRXYKK19fWk5LN1dlYkNvcmUxNEluc3BlY3RvckFnZW50MTdkcmF3
Tm9kZUhpZ2hsaWdodEVSTlNfMTVHcmFwaGljc0NvbnRleHRFCitfX1pOSzdXZWJDb3JlMTRJbnNw
ZWN0b3JBZ2VudDMxaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZUV2CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwYTQxOGU2Li4zMTk4
YmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMDA2LDYgKzIwMDYsOCBAQAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwJywK
KyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50LmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCmluZGV4IGRlNGVjNzcuLjBiZGM1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMDQyLDYg
KzEwNDIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5jcHAgXAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXApAQCAtMTk0MCw2ICsxOTQxLDcgQEAgSEVBREVS
UyArPSBcCiAgICAgaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmggXAogICAgIGluc3BlY3Rvci9J
bmplY3RlZFNjcmlwdC5oIFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggXAor
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCcm93c2Vy
RGVidWdnZXJBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50Lmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBm
MzU1MGM3Li41NjkwMDA4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtNjUwNzQsNiArNjUwNzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50LmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5z
cGVjdG9yXEluc3BlY3RvckFnZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0Y2Y2NDM5Li5mMzhmMWE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MjY1LDYgKzEyNjUsOCBAQAogCQk0RTE5NTkyRTBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVy
eUV4cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUx
OTU5MjgwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLzsgfTsKIAkJNEYxNTM0
REUxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYxNTM0REQxMUI1MzJFQzAwMjFGRDg2IC8q
IEVkaXRpbmdCZWhhdmlvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTRGMTUzNEUwMTFCNTMzMDIwMDIxRkQ4NiAvKiBFZGl0aW5nQmVoYXZpb3JU
eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYx
NTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvclR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNEYyRDIwNTQxMkVBRTdC
MzAwNUMyODc0IC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9y
QWdlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk0RjJEMjA1NTEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEYyRDIwNTMxMkVBRTdCMzAw
NUMyODc0IC8qIEluc3BlY3RvckFnZW50LmNwcCAqLzsgfTsKIAkJNEYzMjg5QjUxMUE0MkFBQjAw
NUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9y
VmFsdWVzLmNwcCAqLzsgfTsKIAkJNEYzMjg5QjYxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEYzMjg5QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3RvclZhbHVlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRGNEY1RkZCMTFDQkQyRTEw
MEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RjRGNUZGQTExQ0JEMkQyMDBBMTg2QkYgLyogSW5zcGVj
dG9yRnJvbnRlbmQuY3BwICovOyB9OwpAQCAtNzY2Nyw2ICs3NjY5LDggQEAKIAkJNEUxOTU5Mjgw
QTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnlFeHAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlFeHAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNEYxNTM0REQxMUI1MzJFQzAwMjFGRDg2IC8qIEVkaXRpbmdCZWhhdmlvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0aW5nQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNEYxNTM0REYxMUI1MzMwMjAwMjFGRDg2IC8qIEVkaXRpbmdCZWhh
dmlvclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRpbmdCZWhh
dmlvclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRGMkQyMDUyMTJFQUU3
QjMwMDVDMjg3NCAvKiBJbnNwZWN0b3JBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNwZWN0b3JBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
RjJEMjA1MzEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQWdlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0RjMyODlCMzExQTQyQUFCMDA1QUJFN0UgLyogSW5zcGVjdG9y
VmFsdWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
clZhbHVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRGMzI4OUI0MTFBNDJB
QUIwMDVBQkU3RSAvKiBJbnNwZWN0b3JWYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5zcGVjdG9yVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTRGNEY1RkZBMTFDQkQyRDIwMEExODZCRiAvKiBJbnNwZWN0b3JGcm9udGVuZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjk2OSw2ICsxMjk3Myw4IEBACiAJCQkJN0Ew
RTc2RjcxMEJGMDhFRDAwQTAyNzZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5oICovLAogCQkJCTdB
MEU3NkY4MTBCRjA4RUQwMEEwMjc2RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuaWRsICovLAogCQkJ
CTdBNTYzRjk1MTJERjVDOTEwMEY0NTM2RCAvKiBJbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAqLywK
KwkJCQk0RjJEMjA1MjEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuaCAqLywKKwkJ
CQk0RjJEMjA1MzEyRUFFN0IzMDA1QzI4NzQgLyogSW5zcGVjdG9yQWdlbnQuY3BwICovLAogCQkJ
CUI4ODVFOEQyMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQuY3BwICovLAogCQkJCUI4ODVFOEQzMTFFMDZERDIwMDlGRkJGNCAvKiBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaCAqLywKIAkJCQlGM0Q0QzQ3NjEyRTA3NjYzMDAzREExNTAgLyog
SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwICovLApAQCAtMjI0MTUsNiArMjI0MjEs
NyBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhBRTM0RjEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xs
YWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAorCQkJCTRGMkQyMDU0MTJFQUU3QjMwMDVDMjg3NCAv
KiBJbnNwZWN0b3JBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTExMCw2ICsyNTExNyw3IEBA
CiAJCQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhBRTM0RTEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xs
YWJsZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEYyRDIwNTUxMkVBRTdCMzAwNUMyODc0
IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCmlu
ZGV4IDk3MTA5OGQuLmRkMzZjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDcg
QEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0Lmgi
CiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTVdp
bmRvd0N1c3RvbS5oIgpAQCAtMTI4LDggKzEyOCw3IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlw
dEhvc3Q6Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW1wbCgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7Ci0gICAgaWYgKCFpYykKKyAgICBpZiAoIWlt
cGwoKS0+aW5zcGVjdG9yQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMTc3LDggKzE3Niw3
IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGlt
cGwoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwotICAgIGlmICghaWMpCisgICAgaWYgKCFpbXBs
KCktPmluc3BlY3RvckFnZW50KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAg
ICAgU3RvcmFnZSogc3RvcmFnZSA9IHRvU3RvcmFnZShleGVjLT5hcmd1bWVudCgwKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5q
ZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCA2YmQ1YWJiLi5jZTE3MzJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhv
c3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElu
amVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRT
Y3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgi
CkBAIC0xNDcsOCArMTQ2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3Jp
cHRIb3N0Ojpub2RlRm9ySWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpYyA9IGhvc3QtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKLSAgICBpZiAoIWljKQor
ICAgIGlmICghaG9zdC0+aW5zcGVjdG9yQWdlbnQoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAogICAgIHJldHVybiB0b1Y4KG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQppbmRleCBlMjE1YTkxLi4yYWI1
ZWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQpAQCAtNjAsNyArNjAsNyBAQCAkdHlwZVRyYW5zZm9ybXsiSW5qZWN0ZWRTY3Jp
cHQifSA9IHsKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckFnZW50LT5pbmpl
Y3RlZFNjcmlwdEFnZW50KCkiLAogfTsKICR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsK
LSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIkluc3BlY3RvckNvbnRyb2xsZXIuaCIsICMgRklYTUU6
IFRlbXBvcmFyeSBzb2x1dGlvbiB1bnRpbCBleHRyYWN0aW5nIHRoZSByZWFsIEluc3BlY3RvckFn
ZW50IGZyb20gSW5zcGVjdG9yQ29udHJvbGxlci4KKyAgICAiZm9yd2FyZEhlYWRlciIgPT4gIklu
c3BlY3RvckFnZW50LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQWdl
bnQiLAogfTsKICR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7CkBAIC0yNjksNyArMjY5LDYg
QEAgc3ViIEdlbmVyYXRlSW50ZXJmYWNlCiAgICAgJGJhY2tlbmRDbGFzc05hbWUgPSAkY2xhc3NO
YW1lIC4gIkJhY2tlbmREaXNwYXRjaGVyIjsKICAgICAkYmFja2VuZEpTU3R1Yk5hbWUgPSAkY2xh
c3NOYW1lIC4gIkJhY2tlbmRTdHViIjsKICAgICBteSBAYmFja2VuZEhlYWQ7Ci0gICAgcHVzaChA
YmFja2VuZEhlYWQsICIgICAgdHlwZWRlZiBJbnNwZWN0b3JDb250cm9sbGVyIEluc3BlY3RvckFn
ZW50OyIpOyAjIEZJWE1FOiBUZW1wb3Jhcnkgc3Vic3RpdHV0aW9uIHVudGlsIGV4dHJhY3Rpbmcg
SW5zcGVjdG9yQWdlbnQgZnJvbSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiICAgICR7YmFja2VuZENsYXNzTmFtZX0oSW5zcGVjdG9yQWdlbnQqIGluc3BlY3Rv
ckFnZW50KSA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpIHsgfSIpOwogICAgIHB1
c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQpIGNvbnN0OyIpOwogICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKaW5k
ZXggZDY3YWRhZi4uZmJiNGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAKICNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUg
IkluamVjdGVkU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdl
bnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiCkBAIC02OSw4ICs2OSw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5qZWN0ZWRTY3JpcHRI
b3N0OjpJbmplY3RlZFNjcmlwdEhvc3QoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVy
KQorSW5qZWN0ZWRTY3JpcHRIb3N0OjpJbmplY3RlZFNjcmlwdEhvc3QoSW5zcGVjdG9yQWdlbnQq
IGluc3BlY3RvckFnZW50KQorICAgIDogbV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkK
ICAgICAsIG1fbmV4dEluamVjdGVkU2NyaXB0SWQoMSkKICAgICAsIG1fbGFzdFdvcmtlcklkKDEg
PDwgMzEpIC8vIERpc3Rpbmd1aXNoIGlkcyBvZiBmYWtlIHdvcmtlcnMgZnJvbSByZWFsIG9uZXMs
IHRvIG1pbmltaXplIHRoZSBjaGFuY2VzIHRoZXkgb3ZlcmxhcC4KIHsKQEAgLTg5LDggKzg5LDgg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmV2YWx1YXRlT25TZWxmKGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb25Cb2R5LCBQYXNzUmVmUHRyPEkKIAogdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQot
ICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNvbnNvbGVBZ2VudCgpLT5jbGVhckNvbnNv
bGVNZXNzYWdlcygpOworICAgIGlmIChtX2luc3BlY3RvckFnZW50KQorICAgICAgICBtX2luc3Bl
Y3RvckFnZW50LT5jb25zb2xlQWdlbnQoKS0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKIH0KIAog
dm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKQEAg
LTEzMCwyMyArMTMwLDIzIEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWROb2Rl
KHVuc2lnbmVkIGxvbmcgbnVtKQogI2lmIEVOQUJMRShEQVRBQkFTRSkKIERhdGFiYXNlKiBJbmpl
Y3RlZFNjcmlwdEhvc3Q6OmRhdGFiYXNlRm9ySWQobG9uZyBkYXRhYmFzZUlkKQogewotICAgIGlm
IChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFz
ZUFnZW50KCkpCi0gICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNl
QWdlbnQoKS0+ZGF0YWJhc2VGb3JJZChkYXRhYmFzZUlkKTsKKyAgICBpZiAobV9pbnNwZWN0b3JB
Z2VudCAmJiBtX2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCkpCisgICAgICAgIHJldHVy
biBtX2luc3BlY3RvckFnZW50LT5kYXRhYmFzZUFnZW50KCktPmRhdGFiYXNlRm9ySWQoZGF0YWJh
c2VJZCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxl
Y3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpCiB7Ci0gICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlciAmJiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRhdGFiYXNlQWdlbnQoKSkKLSAgICAg
ICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kYXRhYmFzZUFnZW50KCktPnNlbGVjdERhdGFiYXNl
KGRhdGFiYXNlKTsKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCAmJiBtX2luc3BlY3RvckFnZW50
LT5kYXRhYmFzZUFnZW50KCkpCisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmRhdGFiYXNlQWdl
bnQoKS0+c2VsZWN0RGF0YWJhc2UoZGF0YWJhc2UpOwogfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6c2VsZWN0RE9NU3RvcmFnZShT
dG9yYWdlKiBzdG9yYWdlKQogewotICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21TdG9yYWdlQWdlbnQoKSkKLSAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5kb21TdG9yYWdlQWdlbnQoKS0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdl
KTsKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCAmJiBtX2luc3BlY3RvckFnZW50LT5kb21TdG9y
YWdlQWdlbnQoKSkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZG9tU3RvcmFnZUFnZW50KCkt
PnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZSk7CiB9CiAjZW5kaWYKIApAQCAtMTY2LDcgKzE2Niw3
IEBAIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChJbnNwZWN0b3JPYmplY3QqIG9iCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2Ny
aXB0SG9zdDo6aW5qZWN0ZWRTY3JpcHRGb3JNYWluRnJhbWUoKQogewotICAgIHJldHVybiBpbmpl
Y3RlZFNjcmlwdEZvcihtYWluV29ybGRTY3JpcHRTdGF0ZShtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpKTsKKyAgICByZXR1cm4gaW5qZWN0ZWRTY3Jp
cHRGb3IobWFpbldvcmxkU2NyaXB0U3RhdGUobV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFn
ZSgpLT5tYWluRnJhbWUoKSkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6ZGlzY2Fy
ZEluamVjdGVkU2NyaXB0cygpCkBAIC0xOTIsMTYgKzE5MiwxNiBAQCB2b2lkIEluamVjdGVkU2Ny
aXB0SG9zdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cChsb25nIGluamVjdGVkU2NyaXB0SWQs
IGNvbnN0CiAKIEluc3BlY3RvckRPTUFnZW50KiBJbmplY3RlZFNjcmlwdEhvc3Q6Omluc3BlY3Rv
ckRPTUFnZW50KCkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICBpZiAo
IW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCk7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQt
PmRvbUFnZW50KCk7CiB9CiAKIEluc3BlY3RvckZyb250ZW5kKiBJbmplY3RlZFNjcmlwdEhvc3Q6
OmZyb250ZW5kKCkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICBpZiAo
IW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPmZyb250ZW5kKCk7CisgICAgcmV0dXJuIG1faW5zcGVjdG9yQWdlbnQt
PmZyb250ZW5kKCk7CiB9CiAKIFN0cmluZyBJbmplY3RlZFNjcmlwdEhvc3Q6OmluamVjdGVkU2Ny
aXB0U291cmNlKCkKQEAgLTIyMywxNCArMjIzLDE0IEBAIGxvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0
OjpuZXh0V29ya2VySWQoKQogCiB2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6ZGlkQ3JlYXRlV29y
a2VyKGxvbmcgaWQsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKQogewot
ICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+ZGlkQ3JlYXRlV29ya2VyKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKKyAgICBpZiAo
bV9pbnNwZWN0b3JBZ2VudCkKKyAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+ZGlkQ3JlYXRlV29y
a2VyKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEhv
c3Q6OmRpZERlc3Ryb3lXb3JrZXIobG9uZyBpZCkKIHsKLSAgICBpZiAobV9pbnNwZWN0b3JDb250
cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRpZERlc3Ryb3lXb3JrZXIo
aWQpOworICAgIGlmIChtX2luc3BlY3RvckFnZW50KQorICAgICAgICBtX2luc3BlY3RvckFnZW50
LT5kaWREZXN0cm95V29ya2VyKGlkKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCmluZGV4IDEw
OGYxMTguLmY1MWY4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgSW5qZWN0ZWRTY3JpcHRIb3N0
X2gKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVy
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKQEAgLTUyLDkgKzUyLDkgQEAgY2xhc3Mg
U3RvcmFnZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPElu
amVjdGVkU2NyaXB0SG9zdD4KIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmpl
Y3RlZFNjcmlwdEhvc3Q+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250
cm9sbGVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4gY3JlYXRl
KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5qZWN0ZWRTY3JpcHRIb3N0KGluc3BlY3RvckNvbnRyb2xsZXIpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbmplY3RlZFNjcmlwdEhvc3QoaW5zcGVjdG9yQWdl
bnQpKTsKICAgICB9CiAKICAgICB+SW5qZWN0ZWRTY3JpcHRIb3N0KCk7CkBAIC02Miw4ICs2Miw4
IEBAIHB1YmxpYzoKICAgICAvLyBQYXJ0IG9mIHRoZSBwcm90b2NvbC4KICAgICB2b2lkIGV2YWx1
YXRlT25TZWxmKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25Cb2R5LCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBhcmd1bWVudHNBcnJheSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
IAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXI7IH0KLSAgICB2b2lkIGRpc2Nvbm5lY3RDb250cm9sbGVy
KCkgeyBtX2luc3BlY3RvckNvbnRyb2xsZXIgPSAwOyB9CisgICAgSW5zcGVjdG9yQWdlbnQqIGlu
c3BlY3RvckFnZW50KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JBZ2VudDsgfQorICAgIHZvaWQgZGlz
Y29ubmVjdENvbnRyb2xsZXIoKSB7IG1faW5zcGVjdG9yQWdlbnQgPSAwOyB9CiAKICAgICB2b2lk
IGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAKQEAgLTk2LDE0ICs5NiwxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzSW5zcGVjdGVkV2luZG93KFNjcmlwdFN0YXRlKik7CiAK
IHByaXZhdGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0KEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIpOworICAgIEluamVjdGVkU2NyaXB0SG9zdChJbnNwZWN0b3JBZ2Vu
dCopOwogICAgIEluc3BlY3RvckRPTUFnZW50KiBpbnNwZWN0b3JET01BZ2VudCgpOwogICAgIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCgpOwogICAgIFN0cmluZyBpbmplY3RlZFNjcmlwdFNv
dXJjZSgpOwogICAgIFNjcmlwdE9iamVjdCBjcmVhdGVJbmplY3RlZFNjcmlwdChjb25zdCBTdHJp
bmcmIHNvdXJjZSwgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBsb25nIGlkKTsKICAgICB2b2lk
IGRpc2NhcmRJbmplY3RlZFNjcmlwdChTY3JpcHRTdGF0ZSopOwogCi0gICAgSW5zcGVjdG9yQ29u
dHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIEluc3BlY3RvckFnZW50KiBtX2lu
c3BlY3RvckFnZW50OwogICAgIGxvbmcgbV9uZXh0SW5qZWN0ZWRTY3JpcHRJZDsKICAgICBsb25n
IG1fbGFzdFdvcmtlcklkOwogICAgIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBJbmplY3RlZFNjcmlw
dD4gSWRUb0luamVjdGVkU2NyaXB0TWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckFnZW50LmNwcApzaW1pbGFyaXR5IGluZGV4IDg2JQpjb3B5IGZyb20gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmNvcHkgdG8gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAppbmRleCBmNTc2MTBmLi44NjAx
MWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNw
cApAQCAtMjQsMTEgKzI0LDExIEBACiAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNp
bmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb25zb2xlQWdl
bnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCkBAIC05OSwxMiArMTAwLDEy
IEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9y
LmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKQEAgLTEyOSwxMyArMTMwLDE0IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgY2hhciogY29uc3Qg
SW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5lbCA9ICJlbGVtZW50cyI7Ci1jb25zdCBj
aGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7
Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAi
c2NyaXB0cyI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpQcm9maWxl
c1BhbmVsID0gInByb2ZpbGVzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFnZW50OjpF
bGVtZW50c1BhbmVsID0gImVsZW1lbnRzIjsKK2NvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckFn
ZW50OjpDb25zb2xlUGFuZWwgPSAiY29uc29sZSI7Citjb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0
b3JBZ2VudDo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOworY29uc3QgY2hhciogY29uc3QgSW5z
cGVjdG9yQWdlbnQ6OlByb2ZpbGVzUGFuZWwgPSAicHJvZmlsZXMiOwogCi1JbnNwZWN0b3JDb250
cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCog
Y2xpZW50KQotICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCitJbnNwZWN0b3JBZ2VudDo6SW5z
cGVjdG9yQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgUGFn
ZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2luc3BlY3RvckNvbnRy
b2xsZXIoaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAsIG1faW5zcGVjdGVkUGFnZShwYWdlKQog
ICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCiAg
ICAgLCBtX2Nzc0FnZW50KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQpAQCAtMTUyLDcgKzE1NCw3
IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwg
SW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7
CiB9CiAKLUluc3BlY3RvckNvbnRyb2xsZXI6On5JbnNwZWN0b3JDb250cm9sbGVyKCkKK0luc3Bl
Y3RvckFnZW50Ojp+SW5zcGVjdG9yQWdlbnQoKQogewogICAgIC8vIFRoZXNlIHNob3VsZCBoYXZl
IGJlZW4gY2xlYXJlZCBpbiBpbnNwZWN0ZWRQYWdlRGVzdHJveWVkKCkuCiAgICAgQVNTRVJUKCFt
X2NsaWVudCk7CkBAIC0xNjAsNyArMTYyLDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6fkluc3Bl
Y3RvckNvbnRyb2xsZXIoKQogICAgIEFTU0VSVCghbV9oaWdobGlnaHRlZE5vZGUpOwogfQogCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RlZFBhZ2VEZXN0cm95ZWQoKQordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCiB7CiAgICAgaWYgKG1fZnJv
bnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmRpc2Nvbm5lY3RGcm9tQmFja2VuZCgpOwpAQCAt
MTgyLDM5ICsxODQsMzkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0ZWRQYWdl
RGVzdHJveWVkKCkKICAgICBtX2NsaWVudCA9IDA7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZW5hYmxlZCgpIGNvbnN0Citib29sIEluc3BlY3RvckFnZW50OjplbmFibGVkKCkgY29u
c3QKIHsKICAgICBpZiAoIW1faW5zcGVjdGVkUGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2UtPnNldHRpbmdzKCktPmRldmVsb3BlckV4dHJhc0Vu
YWJsZWQoKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNwZWN0b3JTdGFydHNB
dHRhY2hlZCgpCitib29sIEluc3BlY3RvckFnZW50OjppbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgp
CiB7CiAgICAgcmV0dXJuIG1fc2V0dGluZ3MtPmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6
Okluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRJbnNwZWN0b3JTdGFydHNBdHRhY2hlZChib29sIGF0dGFjaGVkKQordm9pZCBJbnNwZWN0
b3JBZ2VudDo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKIHsKICAg
ICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpJbnNwZWN0b3JTdGFy
dHNBdHRhY2hlZCwgYXR0YWNoZWQpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNl
dEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KQordm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6c2V0SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQobG9uZyBoZWlnaHQpCiB7CiAgICAgbV9zZXR0
aW5ncy0+c2V0TG9uZyhJbnNwZWN0b3JTZXR0aW5nczo6SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQs
IGhlaWdodCk7CiB9CiAKLWxvbmcgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yQXR0YWNo
ZWRIZWlnaHQoKSBjb25zdAorbG9uZyBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdG9yQXR0YWNoZWRI
ZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3NldHRpbmdzLT5nZXRMb25nKEluc3BlY3Rv
clNldHRpbmdzOjpJbnNwZWN0b3JBdHRhY2hlZEhlaWdodCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9y
Q29udHJvbGxlcjo6c2VhcmNoaW5nRm9yTm9kZUluUGFnZSgpIGNvbnN0Citib29sIEluc3BlY3Rv
ckFnZW50OjpzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9z
dGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6c2VhcmNoaW5nRm9yTm9kZSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tp
ZShjb25zdCBTdHJpbmcmIGluc3BlY3RvclN0YXRlQ29va2llKQordm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJpbmcmIGluc3BlY3Rv
clN0YXRlQ29va2llKQogewogICAgIG1fc3RhdGUtPnJlc3RvcmVGcm9tSW5zcGVjdG9yQ29va2ll
KGluc3BlY3RvclN0YXRlQ29va2llKTsKIApAQCAtMjM5LDcgKzI0MSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBTdHJp
bmcmIGluc3BlY3RvCiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjppbnNw
ZWN0KE5vZGUqIG5vZGUpCit2b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0KE5vZGUqIG5vZGUp
CiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1Niw3ICsyNTgs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3QoTm9kZSogbm9kZSkKICAgICBm
b2N1c05vZGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpmb2N1c05vZGUoKQor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6Zm9jdXNOb2RlKCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjY5LDcgKzI3MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Zm9jdXNOb2RlKCkKICAgICBtX25vZGVUb0ZvY3VzID0gMDsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9yQWdl
bnQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkBAIC0yNzgsMTQgKzI4MCwxNCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmhpZ2hsaWdodChOb2RlKiBub2RlKQogICAgIG1fY2xpZW50LT5oaWdobGlnaHQobm9kZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0RE9NTm9kZShsb25nIG5vZGVJ
ZCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmhpZ2hsaWdodERPTU5vZGUobG9uZyBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IDA7CiAgICAgaWYgKG1fZG9tQWdlbnQgJiYgKG5vZGUgPSBtX2Rv
bUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKSkpCiAgICAgICAgIGhpZ2hsaWdodChub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRGcmFtZSh1bnNpZ25lZCBsb25n
IGZyYW1lSWQpCit2b2lkIEluc3BlY3RvckFnZW50OjpoaWdobGlnaHRGcmFtZSh1bnNpZ25lZCBs
b25nIGZyYW1lSWQpCiB7CiAgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5zcGVjdGVkUGFnZS0+
bWFpbkZyYW1lKCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUpKSB7CkBAIC0yOTYs
NyArMjk4LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdobGlnaHRGcmFtZSh1bnNp
Z25lZCBsb25nIGZyYW1lSWQpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmhpZGVIaWdobGlnaHQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aGlkZUhpZ2hsaWdodCgpCiB7
CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTMwNCw3ICszMDYsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZGVIaWdobGlnaHQoKQogICAgIG1fY2xpZW50
LT5oaWRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkgfHwgIXNl
YXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzE2LDcgKzMxOCw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1CiAgICAgICAgIGhpZ2hsaWdodChub2RlKTsKIH0K
IAotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpoYW5kbGVNb3VzZVByZXNzKCkKK2Jvb2wgSW5z
cGVjdG9yQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQogewogICAgIGlmICghZW5hYmxlZCgpIHx8
ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMy
OSwxMyArMzMxLDEzIEBAIGJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGFuZGxlTW91c2VQcmVz
cygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVu
dD4gY2xpZW50KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KQogewogICAgIEFT
U0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7CiAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENsaWVudCA9IGNsaWVudDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbGVh
cldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdvcmxk
KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1l
KiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKIHsKICAgICBpZiAod29ybGQgIT0gbWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM2MCw3ICszNjIsNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChG
cmFtZSogZnJhbWUsIERPTVdyYXBwZXJXbwogICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+
aW5qZWN0U2NyaXB0KG1faW5zcGVjdG9yRXh0ZW5zaW9uQVBJLCBtYWluV29ybGRTY3JpcHRTdGF0
ZShmcmFtZSkpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zv
ck5vZGUoYm9vbCBlbmFibGVkKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKHNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSA9
PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0zNjksMTMgKzM3MSwxMyBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnNldFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKQogICAg
ICAgICBoaWRlSGlnaGxpZ2h0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0
U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKQordm9pZCBJbnNw
ZWN0b3JBZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0
YXRlKQogewogICAgICpuZXdTdGF0ZSA9IGVuYWJsZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9k
ZShlbmFibGVkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRl
bmQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6Y29ubmVjdEZyb250ZW5kKCkKIHsKICAgICBtX29w
ZW5pbmdGcm9udGVuZCA9IGZhbHNlOwogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRz
KCk7CkBAIC00MDcsMTMgKzQwOSwxMyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5l
Y3RGcm9udGVuZCgpCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgIG1fZmlsZVN5c3RlbUFn
ZW50ID0gSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5n
ZXQoKSk7CiAjZW5kaWYKLSAgICAKKwogICAgIGlmICghSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpoYXNGcm9udGVuZHMoKSkKICAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6c2V0Q2FwdHVyZUNh
bGxTdGFja0ZvclVuY2F1Z2h0RXhjZXB0aW9ucyh0cnVlKTsKICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmZyb250ZW5kQ3JlYXRlZCgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNob3coKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hvdygpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyNSwxMSArNDI3LDExIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvdygpCiAgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgp
OwogICAgIGVsc2UgewogICAgICAgICBtX29wZW5pbmdGcm9udGVuZCA9IHRydWU7Ci0gICAgICAg
IG1fY2xpZW50LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQodGhpcyk7CisgICAgICAgIG1fY2xpZW50
LT5vcGVuSW5zcGVjdG9yRnJvbnRlbmQoaW5zcGVjdG9yQ29udHJvbGxlcigpKTsKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFu
ZWwpCit2b2lkIEluc3BlY3RvckFnZW50OjpzaG93UGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbCkK
IHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDQzLDcgKzQ0NSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFu
ZWwpCiAgICAgbV9mcm9udGVuZC0+c2hvd1BhbmVsKHBhbmVsKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpjbG9zZSgpCit2b2lkIEluc3BlY3RvckFnZW50OjpjbG9zZSgpCiB7CiAg
ICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CkBAIC00NTEsNyArNDUzLDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgpCiAgICAgZGlzY29ubmVjdEZyb250ZW5k
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzY29ubmVjdEZyb250ZW5kKCkK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiB7CiAgICAgaWYgKCFt
X2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CkBAIC00ODcsMTQgKzQ4OSwxNCBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpc2Nvbm5lY3RGcm9udGVuZCgpCiAgICAgbV9leHRyYUhlYWRl
cnMuY2xlYXIoKTsKIH0KIAotSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzb3VyY2VBZ2VudCgpCitJbnNwZWN0b3JSZXNvdXJjZUFnZW50KiBJbnNwZWN0b3JB
Z2VudDo6cmVzb3VyY2VBZ2VudCgpCiB7CiAgICAgaWYgKCFtX3Jlc291cmNlQWdlbnQgJiYgbV9m
cm9udGVuZCkKICAgICAgICAgbV9yZXNvdXJjZUFnZW50ID0gSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dDo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQo
KSk7CiAgICAgcmV0dXJuIG1fcmVzb3VyY2VBZ2VudC5nZXQoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCit2b2lkIEluc3Bl
Y3RvckFnZW50OjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiB7CiAgICAgbV9yZXNv
dXJjZUFnZW50LmNsZWFyKCk7CiAgICAgbV9ydW50aW1lQWdlbnQuY2xlYXIoKTsKQEAgLTUyNCwx
MiArNTI2LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlm
ZXRpbWVBZ2VudHMoKQogCiAjaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgIGlmIChtX2ZpbGVT
eXN0ZW1BZ2VudCkKLSAgICAgICAgbV9maWxlU3lzdGVtQWdlbnQtPnN0b3AoKTsgCisgICAgICAg
IG1fZmlsZVN5c3RlbUFnZW50LT5zdG9wKCk7CiAgICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LmNs
ZWFyKCk7CiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNj
cmlwdE9iamVjdHMoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3Rz
KCkKIHsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAgICAgaWYgKCFtX2Zyb250ZW5kKQpAQCAt
NTU5LDcgKzU2MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cG9wdWxhdGVTY3JpcHRP
YmplY3RzKCkKICAgICByZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlTm9BY3Rpb24pOwog
fQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgp
Cit2b2lkIEluc3BlY3RvckFnZW50OjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKQogewogICAg
IG1fZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCkpOwogCkBAIC01ODIsNyArNTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKQogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6cmVzdG9yZURlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3Rv
cmVEZWJ1Z2dlcigpCiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpAQCAtNTkzLDcgKzU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6cmVzdG9yZURlYnVnZ2VyKCkKICNlbmRpZgogfQogCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24gYWN0aW9uKQordm9p
ZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBh
Y3Rpb24pCiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpAQCAtNjA1LDcgKzYwNyw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
cmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZUFjdGlvbiBhY3Rpb24pCiAjZW5kaWYKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp1bmJpbmRBbGxSZXNvdXJjZXMoKQordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6dW5iaW5kQWxsUmVzb3VyY2VzKCkKIHsKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CkBAIC02MjEsNyArNjIzLDcgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjp1bmJpbmRBbGxSZXNvdXJjZXMoKQogICAgICAgICBtX3RpbWVsaW5lQWdl
bnQtPnJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9h
ZChEb2N1bWVudExvYWRlciogbG9hZGVyKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ29tbWl0
TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC02NzUsNyArNjc3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgfQogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERv
Y3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHVybCkKK3ZvaWQgSW5zcGVjdG9yQWdl
bnQ6Om1haW5SZXNvdXJjZUZpcmVkRE9NQ29udGVudEV2ZW50KERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBpZiAoIWVuYWJsZWQoKSB8fCAhaXNNYWluUmVz
b3VyY2VMb2FkZXIobG9hZGVyLCB1cmwpKQogICAgICAgICByZXR1cm47CkBAIC02ODYsNyArNjg4
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYWluUmVzb3VyY2VGaXJlZERPTUNvbnRl
bnRFdmVudChEb2N1bWVudExvYWRlciogbG9hZGUKICAgICAgICAgbV9mcm9udGVuZC0+ZG9tQ29u
dGVudEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6bWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
Y29uc3QgS1VSTCYgdXJsKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6bWFpblJlc291cmNlRmlyZWRM
b2FkRXZlbnQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgdXJsKQogewogICAg
IGlmICghZW5hYmxlZCgpIHx8ICFpc01haW5SZXNvdXJjZUxvYWRlcihsb2FkZXIsIHVybCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTY5NywxMiArNjk5LDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6bWFpblJlc291cmNlRmlyZWRMb2FkRXZlbnQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
Y29uCiAgICAgICAgIG1fZnJvbnRlbmQtPmxvYWRFdmVudEZpcmVkKGN1cnJlbnRUaW1lKCkpOwog
fQogCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmlzTWFpblJlc291cmNlTG9hZGVyKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVcmwpCitib29sIEluc3BlY3Rv
ckFnZW50Ojppc01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25z
dCBLVVJMJiByZXF1ZXN0VXJsKQogewogICAgIHJldHVybiBsb2FkZXItPmZyYW1lKCkgPT0gbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSAmJiByZXF1ZXN0VXJsID09IGxvYWRlci0+cmVxdWVz
dFVSTCgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit2b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsU2VuZFJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIGlmICghZW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03MjAsNyArNzIyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIH0KIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCit2b2lk
IEluc3BlY3RvckFnZW50OjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCiB7CiAgICAgaWYgKG1fc2V0
dGluZ3MpCiAgICAgICAgIHJldHVybjsKQEAgLTcyOCw3ICs3MzAsNyBAQCB2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmVuc3VyZVNldHRpbmdzTG9hZGVkKCkKICAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSLCBtX3NldHRpbmdzLT5nZXRCb29sZWFu
KEluc3BlY3RvclNldHRpbmdzOjpNb25pdG9yaW5nWEhSRW5hYmxlZCkpOwogfQogCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltZWxpbmVQcm9maWxlcigpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogewogICAgIGlmICghZW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm47CkBAIC03NDMsNyArNzQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpzdGFydFRpbWVsaW5lUHJvZmlsZXIoKQogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5z
cGVjdG9yU3RhdGU6OnRpbWVsaW5lUHJvZmlsZXJFbmFibGVkLCB0cnVlKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltZWxpbmVQcm9maWxlcigpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjpzdG9wVGltZWxpbmVQcm9maWxlcigpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc2MSwxMyArNzYzLDEzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c3RvcFRpbWVsaW5lUHJvZmlsZXIoKQogI2lmIEVOQUJMRShXT1JLRVJTKQogY2xhc3Mg
UG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBvc3RX
b3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yV29ya2VyUmVzb3VyY2U+IHdvcmtlciwgSW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyQWN0
aW9uIGFjdGlvbikKKyAgICBzdGF0aWMgUGFzc093blB0cjxQb3N0V29ya2VyTm90aWZpY2F0aW9u
VG9Gcm9udGVuZFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNl
PiB3b3JrZXIsIEluc3BlY3RvckFnZW50OjpXb3JrZXJBY3Rpb24gYWN0aW9uKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG5ldyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2sod29y
a2VyLCBhY3Rpb24pOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQb3N0V29ya2VyTm90aWZpY2F0
aW9uVG9Gcm9udGVuZFRhc2soUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZT4gd29y
a2VyLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gYWN0aW9uKQorICAgIFBvc3RX
b3JrZXJOb3RpZmljYXRpb25Ub0Zyb250ZW5kVGFzayhQYXNzUmVmUHRyPEluc3BlY3Rvcldvcmtl
clJlc291cmNlPiB3b3JrZXIsIEluc3BlY3RvckFnZW50OjpXb3JrZXJBY3Rpb24gYWN0aW9uKQog
ICAgICAgICA6IG1fd29ya2VyKHdvcmtlcikKICAgICAgICAgLCBtX2FjdGlvbihhY3Rpb24pCiAg
ICAgewpAQCAtNzc2LDMzICs3NzgsMzMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCkKICAgICB7CiAg
ICAgICAgIGlmIChzY3JpcHRDb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3IgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdENvbnRleHQpLT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAg
ICAgIGlmIChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihzY3JpcHRDb250ZXh0KS0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkpCiAgICAgICAg
ICAgICAgICAgaW5zcGVjdG9yLT5wb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZCgqbV93
b3JrZXIsIG1fYWN0aW9uKTsKICAgICAgICAgfQogICAgIH0KIAogcHJpdmF0ZToKICAgICBSZWZQ
dHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+IG1fd29ya2VyOwotICAgIEluc3BlY3RvckNvbnRy
b2xsZXI6OldvcmtlckFjdGlvbiBtX2FjdGlvbjsKKyAgICBJbnNwZWN0b3JBZ2VudDo6V29ya2Vy
QWN0aW9uIG1fYWN0aW9uOwogfTsKIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChjb25zdCBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZSYg
d29ya2VyLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gYWN0aW9uKQordm9pZCBJ
bnNwZWN0b3JBZ2VudDo6cG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoY29uc3QgSW5z
cGVjdG9yV29ya2VyUmVzb3VyY2UmIHdvcmtlciwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckFjdGlv
biBhY3Rpb24pCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kKQogICAgICAgICByZXR1cm47CiAjaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBj
YXNlIEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckNyZWF0ZWQ6CisgICAgY2FzZSBJbnNwZWN0
b3JBZ2VudDo6V29ya2VyQ3JlYXRlZDoKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQ3JlYXRlV29y
a2VyKHdvcmtlci5pZCgpLCB3b3JrZXIudXJsKCksIHdvcmtlci5pc1NoYXJlZFdvcmtlcigpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJEZXN0
cm95ZWQ6CisgICAgY2FzZSBJbnNwZWN0b3JBZ2VudDo6V29ya2VyRGVzdHJveWVkOgogICAgICAg
ICBtX2Zyb250ZW5kLT5kaWREZXN0cm95V29ya2VyKHdvcmtlci5pZCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3Jl
YXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1NoYXJlZFdv
cmtlcikKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZENyZWF0ZVdvcmtlcihpbnRwdHJfdCBpZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNTaGFyZWRXb3JrZXIpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgxMCwxMCArODEyLDEwIEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpCiAgICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJS
ZXNvdXJjZShJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVk
V29ya2VyKSk7CiAgICAgbV93b3JrZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwogICAgIGlm
IChtX2luc3BlY3RlZFBhZ2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlv
blRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UsIEluc3BlY3RvckNvbnRyb2xs
ZXI6OldvcmtlckNyZWF0ZWQpKTsKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRU
YXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2UsIEluc3BlY3RvckFnZW50OjpXb3JrZXJDcmVhdGVk
KSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVdvcmtlcihpbnRw
dHJfdCBpZCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZERlc3Ryb3lXb3JrZXIoaW50cHRyX3Qg
aWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTgyMiwxMyAr
ODI0LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRGVzdHJveVdvcmtlcihpbnRw
dHJfdCBpZCkKICAgICBpZiAod29ya2VyUmVzb3VyY2UgPT0gbV93b3JrZXJzLmVuZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG1faW5zcGVjdGVkUGFnZSAmJiBtX2Zyb250ZW5kKQotICAg
ICAgICBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5wb3N0VGFzayhQ
b3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OmNyZWF0ZSh3b3JrZXJSZXNvdXJj
ZS0+c2Vjb25kLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJEZXN0cm95ZWQpKTsKKyAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9z
dFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNrOjpjcmVhdGUod29ya2VyUmVzb3VyY2Ut
PnNlY29uZCwgSW5zcGVjdG9yQWdlbnQ6OldvcmtlckRlc3Ryb3llZCkpOwogICAgIG1fd29ya2Vy
cy5yZW1vdmUod29ya2VyUmVzb3VyY2UpOwogfQogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRPcGVu
RGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgZG9t
YWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikKK3ZvaWQgSW5z
cGVjdG9yQWdlbnQ6OmRpZE9wZW5EYXRhYmFzZShQYXNzUmVmUHRyPERhdGFiYXNlPiBkYXRhYmFz
ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2ZXJzaW9uKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC04
NDMsNyArODQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRPcGVuRGF0YWJhc2Uo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UsIGNvbnN0IFMKIH0KICNlbmRpZgogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmdldENvb2tpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5Piog
Y29va2llcywgV1RGOjpTdHJpbmcqIGNvb2tpZXNTdHJpbmcpCit2b2lkIEluc3BlY3RvckFnZW50
OjpnZXRDb29raWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNvb2tpZXMsIFdURjo6U3RyaW5n
KiBjb29raWVzU3RyaW5nKQogewogICAgIC8vIElmIHdlIGNhbiBnZXQgcmF3IGNvb2tpZXMuCiAg
ICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlzdDsKQEAgLTg4Nyw3ICs4ODksNyBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldENvb2tpZXMoUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogY29va2llcywgV1RGOjpTdHJpbgogICAgICAgICAqY29va2llc1N0cmluZyA9IHN0cmlu
Z0Nvb2tpZXNMaXN0OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JD
b250cm9sbGVyOjpidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29r
aWVzTGlzdCkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckFnZW50OjpidWls
ZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvb2tpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CiAKQEAgLTg5OSw3ICs5MDEsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNw
ZWN0b3JDb250cm9sbGVyOjpidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldAogICAgIHJl
dHVybiBjb29raWVzOwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9y
Q29udHJvbGxlcjo6YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
Q29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICB2YWx1ZS0+c2V0U3Ry
aW5nKCJuYW1lIiwgY29va2llLm5hbWUpOwpAQCAtOTE0LDcgKzkxNiw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckNvb2tp
ZShjb25zdCBDb29rCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGVsZXRlQ29va2llKGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCiB7CiAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkpIHsK
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CkBAIC05Mjgs
NyArOTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkZWxldGVDb29raWUoY29uc3Qg
U3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGQKIH0KIAogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkVXNlRE9NU3RvcmFnZShTdG9y
YWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkK
K3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3Jh
Z2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFl
bmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk1MCw3ICs5NTIsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVh
LCBib29sIGlzTG9jYQogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi12b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IEtVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgS1VSTCYgcmVxdWVzdFVSTCwgY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwp
CiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTk2MSwxOSArOTYz
LDE5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgS1VSCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50
VVJMKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjp3aWxsU2VuZFdlYlNvY2tldEhh
bmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBJbnNwZWN0b3JBZ2VudDo6d2lsbFNlbmRX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAobV9yZXNvdXJj
ZUFnZW50KQogICAgICAgICBtX3Jlc291cmNlQWdlbnQtPndpbGxTZW5kV2ViU29ja2V0SGFuZHNo
YWtlUmVxdWVzdChpZGVudGlmaWVyLCByZXF1ZXN0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit2b2lkIEluc3BlY3RvckFnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9u
c2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKICAgICAgICAgbV9y
ZXNvdXJjZUFnZW50LT5kaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UoaWRlbnRp
ZmllciwgcmVzcG9uc2UpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENsb3Nl
V2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6
OmRpZENsb3NlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKIHsKICAgICBpZiAo
bV9yZXNvdXJjZUFnZW50KQogICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZENsb3NlV2ViU29j
a2V0KGlkZW50aWZpZXIpOwpAQCAtOTgxLDEyICs5ODMsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi1ib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OmlzUmVjb3JkaW5nVXNlckluaXRpYXRlZFBy
b2ZpbGUoKSBjb25zdAorYm9vbCBJbnNwZWN0b3JBZ2VudDo6aXNSZWNvcmRpbmdVc2VySW5pdGlh
dGVkUHJvZmlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudC0+aXNSZWNv
cmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZygpCit2b2lkIEluc3BlY3RvckFnZW50Ojpz
dGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAg
ICAgICByZXR1cm47CkBAIC05OTQsNyArOTk2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKQogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4o
SW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcsIHRydWUpOwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKK3ZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKIHsKICAgICBpZiAo
IWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMiwxOSArMTAwNCwxOSBAQCB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICBt
X3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5n
LCBmYWxzZSk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmlsZXJFbmFibGVk
KCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9yQWdlbnQ6OnByb2ZpbGVyRW5hYmxlZCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGVuYWJsZWQoKSAmJiBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZWQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjplbmFibGVQcm9maWxlcihib29sIGFsd2F5cywg
Ym9vbCBza2lwUmVjb21waWxlKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlUHJvZmlsZXIo
Ym9vbCBhbHdheXMsIGJvb2wgc2tpcFJlY29tcGlsZSkKIHsKICAgICBpZiAoYWx3YXlzKQogICAg
ICAgICBtX3NldHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpQcm9maWxlckFs
d2F5c0VuYWJsZWQsIHRydWUpOwogICAgIG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlKHNraXBSZWNv
bXBpbGUpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpc2FibGVQcm9maWxlcihi
b29sIGFsd2F5cykKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGVQcm9maWxlcihib29sIGFs
d2F5cykKIHsKICAgICBpZiAoYWx3YXlzKQogICAgICAgICBtX3NldHRpbmdzLT5zZXRCb29sZWFu
KEluc3BlY3RvclNldHRpbmdzOjpQcm9maWxlckFsd2F5c0VuYWJsZWQsIGZhbHNlKTsKQEAgLTEw
MjMsNyArMTAyNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZVByb2ZpbGVy
KGJvb2wgYWx3YXlzKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkKK3ZvaWQg
SW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcigpCiB7CiAgICAgaWYgKCFlbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMzgsNyArMTA0MCw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkKICAgICAgICAgZW5hYmxlRGVi
dWdnZXIoZmFsc2UpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZURlYnVn
Z2VyKGJvb2wgYWx3YXlzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIoYm9v
bCBhbHdheXMpCiB7CiAgICAgQVNTRVJUKCFkZWJ1Z2dlckVuYWJsZWQoKSk7CiAgICAgaWYgKGFs
d2F5cykKQEAgLTEwNTMsNyArMTA1NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5h
YmxlRGVidWdnZXIoYm9vbCBhbHdheXMpCiAgICAgbV9mcm9udGVuZC0+ZGVidWdnZXJXYXNFbmFi
bGVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZURlYnVnZ2VyKGJvb2wgYWx3
YXlzKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDcyLDE5
ICsxMDc0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlzYWJsZURlYnVnZ2VyKGJv
b2wgYWx3YXlzKQogICAgICAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0Rpc2FibGVkKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzdW1lKCkKK3ZvaWQgSW5zcGVjdG9yQWdl
bnQ6OnJlc3VtZSgpCiB7CiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKICAgICAgICAgbV9kZWJ1
Z2dlckFnZW50LT5yZXN1bWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRB
bGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50cykKIHsKICAgICBtX3N0YXRlLT5zZXRP
YmplY3QoSW5zcGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cywgYnJlYWtwb2ludHMpOwog
fQogI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIHNjcmlwdCkKIHsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+
ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7CkBAIC0xMDkyLDcgKzEw
OTQsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcwogICAgICAgICBtX3BlbmRpbmdFdmFsdWF0
ZVRlc3RDb21tYW5kcy5hcHBlbmQocGFpcjxsb25nLCBTdHJpbmc+KGNhbGxJZCwgc2NyaXB0KSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KQordm9pZCBJbnNwZWN0
b3JBZ2VudDo6ZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBqc29uUmVzdWx0KQogewogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNj
cmlwdFN0YXRlRnJvbVBhZ2UoZGVidWdnZXJXb3JsZCgpLCBtX2luc3BlY3RlZFBhZ2UpOwogICAg
IFNjcmlwdE9iamVjdCB3aW5kb3c7CkBAIC0xMTg0LDcgKzExODYsNyBAQCBzdGF0aWMgaW5saW5l
IEludFNpemUgZnJhbWVUb01haW5GcmFtZU9mZnNldChGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJu
IG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Cit2
b2lkIEluc3BlY3RvckFnZW50OjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtMTI2MSw3ICsxMjYzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3
Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgZHJhd0Vs
ZW1lbnRUaXRsZShjb250ZXh0LCB0aXRsZVJlZmVyZW5jZUJveCwgb3ZlcmxheVJlY3QsIHNldHRp
bmdzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3RWxlbWVudFRpdGxlKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgYm91bmRpbmdCb3gsIGNvbnN0
IEZsb2F0UmVjdCYgb3ZlcmxheVJlY3QsIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncykgY29u
c3QKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0JiBv
dmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdzKSBjb25zdAogewogICAgIHN0
YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBm
b250SGVpZ2h0UHggPSAxMjsKQEAgLTEzNDgsNyArMTM1MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZHJhd0VsZW1lbnRUaXRsZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFJlCiAgICAgY29udGV4dC5kcmF3VGV4dChmb250LCBub2RlVGl0bGVSdW4sIEludFBvaW50
KHRpdGxlUmVjdC54KCkgKyByZWN0SW5mbGF0ZVB4LCB0aXRsZVJlY3QueSgpICsgZm9udC5mb250
TWV0cmljcygpLmhlaWdodCgpKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6b3Bl
bkluSW5zcGVjdGVkV2luZG93KGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6b3BlbkluSW5zcGVjdGVkV2luZG93KGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEZyYW1l
KiBtYWluRnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpOwogCkBAIC0xMzY2LDM0
ICsxMzY4LDM0IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6b3BlbkluSW5zcGVjdGVkV2lu
ZG93KGNvbnN0IFN0cmluZyYgdXJsKQogICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+Y2hhbmdlTG9j
YXRpb24obWFpbkZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBuZXdGcmFtZS0+
bG9hZGVyKCktPmNvbXBsZXRlVVJMKHVybCksICIiLCBmYWxzZSwgZmFsc2UpOwogfQogCi12b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNjcmlwdFRvRXZhbHVhdGVPbkxvYWQoY29uc3QgU3Ry
aW5nJiBzb3VyY2UpCit2b2lkIEluc3BlY3RvckFnZW50OjphZGRTY3JpcHRUb0V2YWx1YXRlT25M
b2FkKGNvbnN0IFN0cmluZyYgc291cmNlKQogewogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxv
YWQuYXBwZW5kKHNvdXJjZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3Zl
QWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVtb3Zl
QWxsU2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQoKQogewogICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVP
bkxvYWQuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0
b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCit2b2lkIEluc3BlY3RvckFnZW50
OjpzZXRJbnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7CiAgICAg
bV9pbnNwZWN0b3JFeHRlbnNpb25BUEkgPSBzb3VyY2U7CiB9CiAKLUtVUkwgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6aW5zcGVjdGVkVVJMKCkgY29uc3QKK0tVUkwgSW5zcGVjdG9yQWdlbnQ6Omluc3Bl
Y3RlZFVSTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCktPmxvYWRlcigpLT51cmwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxv
YWRQYWdlKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlbG9hZFBhZ2UoKQogewogICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2Ugc2V0IHRoZSB1c2VyIGdlc3R1cmUgaW5kaWNhdG9yIGhlcmU/CiAgICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdl
c3R1cmUpOwogICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPm5hdmlnYXRpb25TY2hl
ZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXJzKQor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoZWFkZXJzKQogewogICAgIG1fZXh0cmFIZWFkZXJzID0gYWRvcHRQdHIobmV3IEhU
VFBIZWFkZXJNYXAoKSk7CiAgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBoZWFkZXJzLT5lbmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpjb3B5IGZyb20gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApjb3B5IHRvIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDkwYTAzMDAuLmIyNTJhMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTI2LDggKzI2LDggQEAK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbnNwZWN0b3JDb250cm9sbGVyX2gKLSNkZWZp
bmUgSW5zcGVjdG9yQ29udHJvbGxlcl9oCisjaWZuZGVmIEluc3BlY3RvckFnZW50X2gKKyNkZWZp
bmUgSW5zcGVjdG9yQWdlbnRfaAogCiAjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1
ZGUgIkNvbnNvbGUuaCIKQEAgLTYwLDYgKzYwLDcgQEAgY2xhc3MgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDsKIGNsYXNzIElu
c3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudDsKK2NsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CiBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNzIEluc3BlY3Rv
ckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OwpAQCAtMTA1LDE2ICsx
MDYsMTcgQEAgY2xhc3MgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdDsKIGNsYXNzIFdlYlNvY2tl
dEhhbmRzaGFrZVJlc3BvbnNlOwogI2VuZGlmCiAKLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnRyb2xsZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIEluc3BlY3RvckFnZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IENvbnNvbGVQYW5lbDsKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgRWxlbWVudHNQYW5lbDsKICAgICBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgUHJvZmlsZXNQYW5lbDsKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgU2NyaXB0c1BhbmVsOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiwgSW5zcGVj
dG9yQ2xpZW50Kik7Ci0gICAgfkluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBJbnNwZWN0b3JB
Z2VudChJbnNwZWN0b3JDb250cm9sbGVyKiwgUGFnZSosIEluc3BlY3RvckNsaWVudCopOworICAg
IHZpcnR1YWwgfkluc3BlY3RvckFnZW50KCk7CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogaW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoKSB7IHJldHVybiBtX2luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmdldCgpOyB9CiAgICAgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JD
bGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQpAQCAtMTUwLDcgKzE1Miw4IEBAIHB1YmxpYzoK
IAogICAgIEluc3BlY3RvclJlc291cmNlQWdlbnQqIHJlc291cmNlQWdlbnQoKTsKIAotICAgIElu
c3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckFnZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAg
IEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2lu
c3BlY3RvckNvbnRyb2xsZXI7IH07CisgICAgSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50
KCkgeyByZXR1cm4gdGhpczsgfQogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFn
ZW50KCkgeyByZXR1cm4gbV9jb25zb2xlQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JDU1NB
Z2VudCogY3NzQWdlbnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9CiAgICAgSW5zcGVj
dG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQpAQCAt
MTgwLDcgKzE4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCB1bnNpZ25lZCBtb2RpZmllckZsYWdzKTsKICAgICBib29s
IGhhbmRsZU1vdXNlUHJlc3MoKTsKIAotICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDbGll
bnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KTsKKyAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ+KTsKICAgICBib29sIGhhc0luc3BlY3RvckZyb250ZW5kQ2xpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsgfQogCiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUqLCBET01XcmFwcGVyV29ybGQqKTsKQEAgLTIxMSw3ICsy
MTQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICB2
b2lkIGRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9j
YWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpOworICAgIHZvaWQgZGlkVXNlRE9NU3RvcmFnZShTdG9y
YWdlQXJlYSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKik7CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShXRUJfU09DS0VUUykKQEAgLTI1NSw3ICsyNTgsNyBAQCBwdWJsaWM6CiAKICAgICBib29s
IGluc3BlY3RvclN0YXJ0c0F0dGFjaGVkKCk7CiAgICAgdm9pZCBzZXRJbnNwZWN0b3JTdGFydHNB
dHRhY2hlZChib29sKTsKLSAgICB2b2lkIHNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcg
aGVpZ2h0KTsKKyAgICB2b2lkIHNldEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcpOwogICAg
IGxvbmcgaW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIEluc3BlY3RvclN0
YXRlKiBzdGF0ZSgpIHsgcmV0dXJuIG1fc3RhdGUuZ2V0KCk7IH0KQEAgLTI4MCw3ICsyODMsNyBA
QCBwcml2YXRlOgogICAgICAgICBQcm9maWxlclJlc3RvcmVOb0FjdGlvbiA9IDAsCiAgICAgICAg
IFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQgPSAxCiAgICAgfTsKLSAgICB2b2lkIHJlc3RvcmVQ
cm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24gYWN0aW9uKTsKKyAgICB2b2lkIHJlc3RvcmVQ
cm9maWxlcihQcm9maWxlclJlc3RvcmVBY3Rpb24pOwogICAgIHZvaWQgdW5iaW5kQWxsUmVzb3Vy
Y2VzKCk7CiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCk7CiAKQEAg
LTI5NCw4ICsyOTcsOSBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mKTsKIAogICAgIHZvaWQg
Zm9jdXNOb2RlKCk7Ci0gICAgYm9vbCBpc01haW5SZXNvdXJjZUxvYWRlcihEb2N1bWVudExvYWRl
ciogbG9hZGVyLCBjb25zdCBLVVJMJiByZXF1ZXN0VXJsKTsKKyAgICBib29sIGlzTWFpblJlc291
cmNlTG9hZGVyKERvY3VtZW50TG9hZGVyKiwgY29uc3QgS1VSTCYgcmVxdWVzdFVybCk7CiAKKyAg
ICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CiAgICAgUGFnZSog
bV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7CiAgICAgT3du
UHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZyb250ZW5kQ2xpZW50OwpA
QCAtMzE5LDEwICszMjMsMTAgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQogICAgIE93blB0cjxJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ+IG1f
YXBwbGljYXRpb25DYWNoZUFnZW50OwogI2VuZGlmCi0gICAgCisKICNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAgICAgUmVmUHRyPEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudD4gbV9maWxlU3lzdGVt
QWdlbnQ7Ci0jZW5kaWYgCisjZW5kaWYKIAogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3Vz
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZUFnZW50PiBtX3Jlc291cmNlQWdlbnQ7CkBA
IC0zNjIsNCArMzY2LDQgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ29udHJvbGxlcl9oKQorI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvckFnZW50X2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCmluZGV4IDFjY2E2ZmUu
LjI3NzZjNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrU3RhdGVOb3RpZmllci5o
IgpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIsIEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCkKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVy
KQorSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAg
ICwgbV9mcm9udGVuZChmcm9udGVuZCkKIHsKIH0KQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogCiB2b2lk
IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZXMoUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogYXBwbGljYXRpb25DYWNoZXMpCiB7Ci0gICAgRG9jdW1lbnRM
b2FkZXIqIGRvY3VtZW50TG9hZGVyID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKKyAgICBEb2N1
bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0ZWRQ
YWdlKCktPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKTsKICAgICBpZiAo
ZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgQXBwbGljYXRpb25DYWNoZUhvc3QqIGhvc3QgPSBk
b2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgQXBwbGljYXRp
b25DYWNoZUhvc3Q6OkNhY2hlSW5mbyBpbmZvID0gaG9zdC0+YXBwbGljYXRpb25DYWNoZUluZm8o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCBhYzBhY2JmLi5iOTM1MmZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJh
bWU7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKLWNsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Citj
bGFzcyBJbnNwZWN0b3JBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogY2xhc3MgSW5z
cGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVjdG9yVmFsdWU7CkBAIC00NCw3ICs0NCw3IEBAIGNs
YXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOworICAgIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudChJbnNwZWN0b3JBZ2VudCosIEluc3BlY3RvckZyb250ZW5kKik7CiAgICAg
fkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIHsgfQogCiAgICAgLy8gQmFja2VuZCB0
byBGcm9udGVuZApAQCAtNTksNyArNTksNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm9MaXN0Jik7CiAgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
KGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mKTsKIAotICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JBZ2Vu
dCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93
c2VyRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QnJvd3NlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDAyM2RjNDkuLjdlZTdlODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpICYm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdl
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JTdGF0ZS5oIgpAQCAtNjEsOCAr
NjEsOCBAQCBjb25zdCBpbnQgZG9tQnJlYWtwb2ludERlcml2ZWRUeXBlU2hpZnQgPSAxNjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6SW5z
cGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9s
bGVyKQorSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKKyAgICA6IG1faW5zcGVj
dG9yQWdlbnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1w
dHlVUkwoZmFsc2UpCiB7CiB9CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgS1VSTCYgdXJsKQogICAg
IG1fWEhSQnJlYWtwb2ludHMuY2xlYXIoKTsKICAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1w
dHlVUkwgPSBmYWxzZTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGFsbEJyZWFrcG9p
bnRzID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9y
U3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cyk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YWxsQnJlYWtwb2ludHMgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5z
cGVjdG9yU3RhdGU6OmJyb3dzZXJCcmVha3BvaW50cyk7CiAgICAgS1VSTCB1cmxDb3B5ID0gdXJs
OwogICAgIHVybENvcHkucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBicmVha3BvaW50cyA9IGFsbEJyZWFrcG9pbnRzLT5nZXRBcnJheSh1cmxD
b3B5KTsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50OjpyZXN0b3JlU3RpY2t5QnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3RvcgogICAgICAg
ICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAmZXZlbnROYW1lKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZXZl
bnROYW1lKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gamF2YVNjcmlwdEJyZWFrcG9pbnRUeXBl
ICYmIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpKSB7CisgICAgfSBlbHNl
IGlmICh0eXBlID09IGphdmFTY3JpcHRCcmVha3BvaW50VHlwZSAmJiBtX2luc3BlY3RvckFnZW50
LT5kZWJ1Z2dlckFnZW50KCkpIHsKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAgICAgaWYgKCFj
b25kaXRpb24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMjIsNyArMTIyLDcgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVz
dG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3IKICAgICAgICAgU3RyaW5n
IGphdmFTY3JpcHRDb25kaXRpb247CiAgICAgICAgIGlmICghY29uZGl0aW9uLT5nZXRTdHJpbmco
ImNvbmRpdGlvbiIsICZqYXZhU2NyaXB0Q29uZGl0aW9uKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCktPnNldFN0aWNr
eUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGluZU51bWJlciksIGphdmFT
Y3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOworICAgICAgICBtX2luc3BlY3RvckFnZW50LT5kZWJ1
Z2dlckFnZW50KCktPnNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGluZU51bWJlciksIGphdmFTY3JpcHRDb25kaXRpb24sIGVuYWJsZWQpOwogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSB4aHJCcmVha3BvaW50VHlwZSkgewogICAgICAgICBpZiAoIWVuYWJsZWQp
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogCiB2b2lk
IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9k
ZUlkLCBsb25nIHR5cGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQ29udHJvbGxl
ci0+ZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAgTm9kZSogbm9kZSA9IG1faW5z
cGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwgbG9uZyB0
eXBlKQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVh
a3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiB7Ci0gICAgTm9kZSogbm9kZSA9IG1faW5z
cGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAgTm9k
ZSogbm9kZSA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQp
OwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMTEsNyArMjExLDcgQEAg
dm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChs
b25nIG5vZGVJZCwgbG9uZyB0eXBlKQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFn
ZW50Ojp3aWxsSW5zZXJ0RE9NTm9kZShOb2RlKiwgTm9kZSogcGFyZW50KQogewotICAgIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXIt
PmRlYnVnZ2VyQWdlbnQoKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFn
ZW50ID0gbV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpOwogICAgIGlmICghZGVidWdn
ZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSosIE5vZGUq
IHBhcmVudCkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92
ZURPTU5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1
Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCk7CisgICAg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9yQWdlbnQt
PmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAKIHZvaWQgSW5zcGVjdG9yQnJvd3Nl
ckRlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0g
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+ZGVidWdnZXJBZ2VudCgpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRl
YnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckFnZW50LT5kZWJ1Z2dlckFnZW50KCk7CiAgICAgaWYg
KCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47CiAKQEAgLTI2NCw3ICsyNjQsNyBAQCB2
b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KE5vZGUqIHRhcmdldCwgbG9uZyBicgogICAgIGlmICgoMSA8PCBicmVha3BvaW50VHlwZSkgJiBp
bmhlcml0YWJsZURPTUJyZWFrcG9pbnRUeXBlc01hc2spIHsKICAgICAgICAgLy8gRm9yIGluaGVy
aXRhYmxlIGJyZWFrcG9pbnQgdHlwZXMsIHRhcmdldCBub2RlIGlzbid0IGFsd2F5cyB0aGUgc2Ft
ZSBhcyB0aGUgbm9kZSB0aGF0IG93bnMgYSBicmVha3BvaW50LgogICAgICAgICAvLyBUYXJnZXQg
bm9kZSBtYXkgYmUgdW5rbm93biB0byBmcm9udGVuZCwgc28gd2UgbmVlZCB0byBwdXNoIGl0IGZp
cnN0LgotICAgICAgICBsb25nIHRhcmdldE5vZGVJZCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+
ZG9tQWdlbnQoKS0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZCh0YXJnZXQpOworICAgICAgICBsb25n
IHRhcmdldE5vZGVJZCA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFnZW50KCktPnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQodGFyZ2V0KTsKICAgICAgICAgQVNTRVJUKHRhcmdldE5vZGVJZCk7CiAgICAg
ICAgIGRlc2NyaXB0aW9uLT5zZXROdW1iZXIoInRhcmdldE5vZGVJZCIsIHRhcmdldE5vZGVJZCk7
CiAKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50
OjpkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicgogICAgICAgICAg
ICAgZGVzY3JpcHRpb24tPnNldEJvb2xlYW4oImluc2VydGlvbiIsIGluc2VydGlvbik7CiAgICAg
fQogCi0gICAgbG9uZyBicmVha3BvaW50T3duZXJOb2RlSWQgPSBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPmRvbUFnZW50KCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYnJlYWtwb2ludE93bmVyKTsK
KyAgICBsb25nIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IG1faW5zcGVjdG9yQWdlbnQtPmRvbUFn
ZW50KCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYnJlYWtwb2ludE93bmVyKTsKICAgICBBU1NF
UlQoYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKICAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJu
b2RlSWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwogICAgIGRlc2NyaXB0aW9uLT5zZXROdW1i
ZXIoInR5cGUiLCBicmVha3BvaW50VHlwZSk7CkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6dXBkYXRlU3VidHJlZUJyZWFrcG9pbnRzKE5vZGUq
IG5vZGUsIHVpbnQzMl8KIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6cGF1
c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoY29uc3QgU3RyaW5nJiBjYXRlZ29yeVR5cGUsIGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3VzKQogewotICAgIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRlYnVn
Z2VyQWdlbnQoKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnNwZWN0b3JBZ2VudC0+ZGVidWdnZXJBZ2VudCgpOwogICAgIGlmICghZGVidWdnZXJBZ2Vu
dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JC
cm93c2VyRGVidWdnZXJBZ2VudDo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVy
bCkKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6d2lsbFNlbmRYTUxIdHRw
UmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
KiBkZWJ1Z2dlckFnZW50ID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kZWJ1Z2dlckFnZW50KCk7
CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVidWdnZXJBZ2VudCA9IG1faW5zcGVjdG9y
QWdlbnQtPmRlYnVnZ2VyQWdlbnQoKTsKICAgICBpZiAoIWRlYnVnZ2VyQWdlbnQpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQuaAppbmRleCAwZmZhODVjLi42Yzg5M2E0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQuaApAQCAtNDQsNyArNDQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBFbGVtZW50OwotY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckFn
ZW50OwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgS1VSTDsKIGNsYXNzIE5vZGU7CkBA
IC01Miw5ICs1Miw5IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBJbnNwZWN0b3JCcm93c2VyRGVidWdn
ZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQnJvd3NlckRlYnVn
Z2VyQWdlbnQpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckJyb3dz
ZXJEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlcikKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJB
Z2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoaW5z
cGVjdG9yQ29udHJvbGxlcikpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckJyb3dzZXJEZWJ1Z2dlckFnZW50KGluc3BlY3RvckFnZW50KSk7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+SW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoKTsKQEAgLTc5LDcgKzc5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoY29uc3QgU3RyaW5n
JiBjYXRlZ29yeVR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBib29sIHN5bmNocm9ub3Vz
KTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudChJbnNwZWN0
b3JDb250cm9sbGVyKik7CisgICAgSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQoSW5zcGVj
dG9yQWdlbnQqKTsKIAogICAgIHZvaWQgcmVzdG9yZVN0aWNreUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQpOwogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBoYXNCcmVha3BvaW50KE5vZGUqLCBsb25nIHR5cGUpOwogICAgIHZvaWQg
ZGlzY2FyZEJpbmRpbmdzKCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3Rv
ckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5zcGVjdG9yQWdlbnQ7CiAgICAg
SGFzaE1hcDxOb2RlKiwgdWludDMyX3Q+IG1fZG9tQnJlYWtwb2ludHM7CiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X1hIUkJyZWFrcG9pbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29uc29sZUFnZW50LmNwcAppbmRleCAyYzgzN2YzLi43NjYzOGM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcApAQCAtMzAs
NyArMzAsNyBAQAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJDb25zb2xlTWVzc2Fn
ZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgotI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JTZXR0aW5ncy5oIgpAQCAtNTAsOCArNTAsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUNvbnNvbGVNZXNzYWdlcyA9IDEw
MDA7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZXhwaXJlQ29uc29sZU1lc3NhZ2VzU3RlcCA9IDEw
MDsKIAotSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICA6IG1faW5zcGVjdG9yQ29u
dHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorSW5zcGVjdG9yQ29uc29sZUFnZW50OjpJbnNw
ZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50KQorICAgIDog
bV9pbnNwZWN0b3JBZ2VudChpbnNwZWN0b3JBZ2VudCkKICAgICAsIG1fZnJvbnRlbmQoMCkKICAg
ICAsIG1fcHJldmlvdXNNZXNzYWdlKDApCiAgICAgLCBtX2V4cGlyZWRDb25zb2xlTWVzc2FnZUNv
dW50KDApCkBAIC02MCw3ICs2MCw3IEBAIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6SW5zcGVjdG9y
Q29uc29sZUFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyCiAKIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6fkluc3BlY3RvckNvbnNvbGVBZ2VudCgpCiB7Ci0gICAgbV9pbnNw
ZWN0b3JDb250cm9sbGVyID0gMDsKKyAgICBtX2luc3BlY3RvckFnZW50ID0gMDsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBl
bmFibGVkLCBib29sKiBuZXdTdGF0ZSkKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBtX2NvbnNvbGVNZXNzYWdl
cy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQgPSAwOwogICAgIG1f
cHJldmlvdXNNZXNzYWdlID0gMDsKLSAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVk
U2NyaXB0SG9zdCgpLT5yZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKDAgLyogcmVsZWFzZSB0aGUg
Z3JvdXAgaW4gYWxsIHNjcmlwdHMgKi8sICJjb25zb2xlIik7Ci0gICAgaWYgKEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSkKKyAg
ICBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhvc3QoKS0+cmVsZWFzZVdyYXBwZXJP
YmplY3RHcm91cCgwIC8qIHJlbGVhc2UgdGhlIGdyb3VwIGluIGFsbCBzY3JpcHRzICovLCAiY29u
c29sZSIpOworICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBtX2luc3BlY3Rv
ckFnZW50LT5kb21BZ2VudCgpKQogICAgICAgICBkb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9k
ZXMoKTsKICAgICBpZiAobV9mcm9udGVuZCkKICAgICAgICAgbV9mcm9udGVuZC0+Y29uc29sZU1l
c3NhZ2VzQ2xlYXJlZCgpOwpAQCAtOTUsMTQgKzk1LDE0IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpzZXRGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAKIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgUGFzc1JlZlB0cjxTY3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjaykKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9y
Q29udHJvbGxlci0+ZW5hYmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgYWRkQ29uc29sZU1lc3NhZ2UobmV3IENvbnNvbGVN
ZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3VtZW50cywgY2FsbFN0YWNr
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlwZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxl
ZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAgICAgYWRkQ29uc29sZU1lc3NhZ2UobmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlw
ZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKSk7CiB9CkBAIC0xNjMsMTUg
KzE2MywxNSBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoUGFzc1JlZlB0cjxT
Y3JpcHRBcmd1bWVudHM+IGFyZ3VtZW50cywgUGFzc1JlZgogCiB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHNlbmRVUkwsIHVuc2lnbmVkIHNlbmRMaW5lTnVtYmVyKQogewot
ICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVkKCkpCisgICAgaWYgKCFtX2lu
c3BlY3RvckFnZW50LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25p
dG9yaW5nWEhSKSkKKyAgICBpZiAobV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0Qm9vbGVh
bihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUikpCiAgICAgICAgIGFkZE1lc3NhZ2VUb0Nv
bnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCAi
WEhSIGZpbmlzaGVkIGxvYWRpbmc6IFwiIiArIHVybCArICJcIi4iLCBzZW5kTGluZU51bWJlciwg
c2VuZFVSTCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5hYmxlZCgpKQor
ICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKQEAgLTE4Miw3ICsx
ODIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUgogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+ZW5h
YmxlZCgpKQorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudC0+ZW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBTdHJpbmcgbWVzc2FnZSA9ICJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSI7
CkBAIC0xOTMsNDAgKzE5Myw0MCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkRmFp
bExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdQogCiB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewotICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c3RhdGUoKS0+c2V0Qm9vbGVhbihJbnNw
ZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUiwgZW5hYmxlZCk7Ci0gICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5zZXR0aW5ncygpLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpNb25pdG9y
aW5nWEhSRW5hYmxlZCwgZW5hYmxlZCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+
c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6bW9uaXRvcmluZ1hIUiwgZW5hYmxlZCk7CisgICAg
bV9pbnNwZWN0b3JBZ2VudC0+c2V0dGluZ3MoKS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5n
czo6TW9uaXRvcmluZ1hIUkVuYWJsZWQsIGVuYWJsZWQpOwogICAgIGlmIChtX2Zyb250ZW5kKQog
ICAgICAgICBtX2Zyb250ZW5kLT5tb25pdG9yaW5nWEhSU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6c2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxl
ZChib29sIGVuYWJsZWQpCiB7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgpLT5z
ZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBlbmFibGVk
KTsKKyAgICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRCb29sZWFuKEluc3BlY3RvclN0
YXRlOjpjb25zb2xlTWVzc2FnZXNFbmFibGVkLCBlbmFibGVkKTsKICAgICBpZiAoIWVuYWJsZWQg
fHwgIW1fZnJvbnRlbmQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZnJvbnRlbmQtPm1vbml0
b3JpbmdYSFJTdGF0ZUNoYW5nZWQobV9pbnNwZWN0b3JDb250cm9sbGVyLT5zdGF0ZSgpLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSk7CisgICAgbV9mcm9udGVuZC0+
bW9uaXRvcmluZ1hIUlN0YXRlQ2hhbmdlZChtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjptb25pdG9yaW5nWEhSKSk7CiAgICAgaWYgKG1fZXhwaXJl
ZENvbnNvbGVNZXNzYWdlQ291bnQpCiAgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUNvbnNvbGVN
ZXNzYWdlRXhwaXJlZENvdW50KG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQpOwogICAgIHVu
c2lnbmVkIG1lc3NhZ2VDb3VudCA9IG1fY29uc29sZU1lc3NhZ2VzLnNpemUoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWVzc2FnZUNvdW50OyArK2kpCi0gICAgICAgIG1fY29uc29s
ZU1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKG1fZnJvbnRlbmQsIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCkpOworICAgICAgICBtX2NvbnNvbGVNZXNzYWdlc1tp
XS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNj
cmlwdEhvc3QoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25zb2xl
TWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPiBjb25zb2xlTWVzc2FnZSkKIHsKLSAg
ICBBU1NFUlQobV9pbnNwZWN0b3JDb250cm9sbGVyLT5lbmFibGVkKCkpOworICAgIEFTU0VSVCht
X2luc3BlY3RvckFnZW50LT5lbmFibGVkKCkpOwogICAgIEFTU0VSVF9BUkcoY29uc29sZU1lc3Nh
Z2UsIGNvbnNvbGVNZXNzYWdlKTsKIAogICAgIGlmIChtX3ByZXZpb3VzTWVzc2FnZSAmJiBtX3By
ZXZpb3VzTWVzc2FnZS0+aXNFcXVhbChjb25zb2xlTWVzc2FnZS5nZXQoKSkpIHsKICAgICAgICAg
bV9wcmV2aW91c01lc3NhZ2UtPmluY3JlbWVudENvdW50KCk7Ci0gICAgICAgIGlmIChtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmNvbnNv
bGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCisgICAgICAgIGlmIChtX2luc3BlY3Rv
ckFnZW50LT5zdGF0ZSgpLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpjb25zb2xlTWVzc2Fn
ZXNFbmFibGVkKSAmJiBtX2Zyb250ZW5kKQogICAgICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2Ut
PnVwZGF0ZVJlcGVhdENvdW50SW5Db25zb2xlKG1fZnJvbnRlbmQpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIG1fcHJldmlvdXNNZXNzYWdlID0gY29uc29sZU1lc3NhZ2UuZ2V0KCk7CiAgICAgICAg
IG1fY29uc29sZU1lc3NhZ2VzLmFwcGVuZChjb25zb2xlTWVzc2FnZSk7Ci0gICAgICAgIGlmICht
X2luc3BlY3RvckNvbnRyb2xsZXItPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6
OmNvbnNvbGVNZXNzYWdlc0VuYWJsZWQpICYmIG1fZnJvbnRlbmQpCi0gICAgICAgICAgICBtX3By
ZXZpb3VzTWVzc2FnZS0+YWRkVG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3BlY3RvckNvbnRy
b2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpKTsKKyAgICAgICAgaWYgKG1faW5zcGVjdG9yQWdl
bnQtPnN0YXRlKCktPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmNvbnNvbGVNZXNzYWdlc0Vu
YWJsZWQpICYmIG1fZnJvbnRlbmQpCisgICAgICAgICAgICBtX3ByZXZpb3VzTWVzc2FnZS0+YWRk
VG9Gcm9udGVuZChtX2Zyb250ZW5kLCBtX2luc3BlY3RvckFnZW50LT5pbmplY3RlZFNjcmlwdEhv
c3QoKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2Zyb250ZW5kICYmIG1fY29uc29sZU1lc3NhZ2Vz
LnNpemUoKSA+PSBtYXhpbXVtQ29uc29sZU1lc3NhZ2VzKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNDExZjcwOS4uMTBmZmIw
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnNvbGVB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb25zb2xlQWdl
bnQuaApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUikKIAogY2xhc3MgQ29uc29sZU1lc3NhZ2U7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9s
bGVyOworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNs
YXNzIEluc3BlY3RvclN0YXRlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKQEAgLTQ5LDcgKzQ5LDcg
QEAgY2xhc3MgU2NyaXB0UHJvZmlsZTsKIGNsYXNzIEluc3BlY3RvckNvbnNvbGVBZ2VudCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKIHB1YmxpYzoK
LSAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciopOworICAgIElu
c3BlY3RvckNvbnNvbGVBZ2VudChJbnNwZWN0b3JBZ2VudCopOwogICAgIH5JbnNwZWN0b3JDb25z
b2xlQWdlbnQoKTsKIAogICAgIHZvaWQgc2V0Q29uc29sZU1lc3NhZ2VzRW5hYmxlZChib29sIGVu
YWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNldENvbnNvbGVNZXNzYWdlc0VuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBhZGRDb25zb2xl
TWVzc2FnZShQYXNzT3duUHRyPENvbnNvbGVNZXNzYWdlPik7CiAKLSAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7CisgICAgSW5zcGVjdG9yQWdlbnQqIG1faW5z
cGVjdG9yQWdlbnQ7CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CiAgICAgQ29u
c29sZU1lc3NhZ2UqIG1fcHJldmlvdXNNZXNzYWdlOwogICAgIFZlY3RvcjxPd25QdHI8Q29uc29s
ZU1lc3NhZ2U+ID4gbV9jb25zb2xlTWVzc2FnZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZjU3NjEwZi4uZmI4NDA5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMSwzMCArMSwzMSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxlay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKQEAgLTMyLDEzNzcgKzMzLDE1IEBACiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SKQogCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2UuaCIKLSNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5o
IgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgotI2luY2x1
ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCi0jaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCi0jaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudC5oIgot
I2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yRE9NQWdlbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuaCIK
LSNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JQcm9maWxlckFnZW50LmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclJ1bnRp
bWVBZ2VudC5oIgotI2luY2x1ZGUgIkluc3BlY3RvclNldHRpbmdzLmgiCi0jaW5jbHVkZSAiSW5z
cGVjdG9yU3RhdGUuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yV29ya2VyUmVzb3Vy
Y2UuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNj
cmlwdENhbGxTdGFjay5oIgotI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgotI2luY2x1
ZGUgIlNjcmlwdE9iamVjdC5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlci5oIgotI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKLSNpbmNs
dWRlICJTY3JpcHRTdGF0ZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0UnVu
LmgiCi0jaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKLSNpbmNsdWRlICJXaW5kb3dG
ZWF0dXJlcy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+Ci0jaW5j
bHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0j
aW5jbHVkZSAiRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmgi
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSNpbmNsdWRlICJJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQuaCIKLSNpbmNsdWRlICJTdG9yYWdlLmgiCi0jaW5jbHVkZSAiU3RvcmFn
ZUFyZWEuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykK
LSNpbmNsdWRlICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotI2luY2x1ZGUgIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2Vu
dC5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9yQ29udHJvbGxlcjo6RWxlbWVudHNQYW5l
bCA9ICJlbGVtZW50cyI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250cm9sbGVyOjpD
b25zb2xlUGFuZWwgPSAiY29uc29sZSI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNwZWN0b3JDb250
cm9sbGVyOjpTY3JpcHRzUGFuZWwgPSAic2NyaXB0cyI7Ci1jb25zdCBjaGFyKiBjb25zdCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpQcm9maWxlc1BhbmVsID0gInByb2ZpbGVzIjsKLQotSW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKLSAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdlKQotICAgICwgbV9jbGllbnQo
Y2xpZW50KQotICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2UpCi0gICAgLCBtX2Nzc0FnZW50
KG5ldyBJbnNwZWN0b3JDU1NBZ2VudCgpKQotICAgICwgbV9zdGF0ZShuZXcgSW5zcGVjdG9yU3Rh
dGUoY2xpZW50KSkKLSAgICAsIG1faW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIobmV3IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKHRoaXMpKQotICAgICwgbV9pbmplY3RlZFNjcmlwdEhvc3Qo
SW5qZWN0ZWRTY3JpcHRIb3N0OjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2NvbnNvbGVBZ2VudChu
ZXcgSW5zcGVjdG9yQ29uc29sZUFnZW50KHRoaXMpKQotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQotICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1f
cHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUodGhpcykpCi0jZW5k
aWYKLXsKLSAgICBBU1NFUlRfQVJHKHBhZ2UsIHBhZ2UpOwotICAgIEFTU0VSVF9BUkcoY2xpZW50
LCBjbGllbnQpOwotfQotCi1JbnNwZWN0b3JDb250cm9sbGVyOjp+SW5zcGVjdG9yQ29udHJvbGxl
cigpCi17Ci0gICAgLy8gVGhlc2Ugc2hvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGluIGluc3BlY3Rl
ZFBhZ2VEZXN0cm95ZWQoKS4KLSAgICBBU1NFUlQoIW1fY2xpZW50KTsKLSAgICBBU1NFUlQoIW1f
aW5zcGVjdGVkUGFnZSk7Ci0gICAgQVNTRVJUKCFtX2hpZ2hsaWdodGVkTm9kZSk7Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVkUGFnZURlc3Ryb3llZCgpCi17Ci0gICAg
aWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpc2Nvbm5lY3RGcm9tQmFja2Vu
ZCgpOwotCi0gICAgaGlkZUhpZ2hsaWdodCgpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgbV9kZWJ1Z2dlckFnZW50LmNsZWFyKCk7Ci0gICAgbV9icm93c2VyRGVidWdn
ZXJBZ2VudC5jbGVhcigpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQobV9pbnNwZWN0ZWRQYWdlKTsK
LSAgICBtX2luc3BlY3RlZFBhZ2UgPSAwOwotCi0gICAgcmVsZWFzZUZyb250ZW5kTGlmZXRpbWVB
Z2VudHMoKTsKLSAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY29ubmVjdENvbnRyb2xsZXIo
KTsKLQotICAgIG1fY2xpZW50LT5pbnNwZWN0b3JEZXN0cm95ZWQoKTsKLSAgICBtX2NsaWVudCA9
IDA7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZW5hYmxlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2luc3BlY3RlZFBhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gbV9pbnNwZWN0ZWRQYWdlLT5zZXR0aW5ncygpLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7
Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQo
KQotewotICAgIHJldHVybiBtX3NldHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdz
OjpJbnNwZWN0b3JTdGFydHNBdHRhY2hlZCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6c2V0SW5zcGVjdG9yU3RhcnRzQXR0YWNoZWQoYm9vbCBhdHRhY2hlZCkKLXsKLSAgICBtX3Nl
dHRpbmdzLT5zZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpJbnNwZWN0b3JTdGFydHNBdHRh
Y2hlZCwgYXR0YWNoZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEluc3Bl
Y3RvckF0dGFjaGVkSGVpZ2h0KGxvbmcgaGVpZ2h0KQotewotICAgIG1fc2V0dGluZ3MtPnNldExv
bmcoSW5zcGVjdG9yU2V0dGluZ3M6Okluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBoZWlnaHQpOwot
fQotCi1sb25nIEluc3BlY3RvckNvbnRyb2xsZXI6Omluc3BlY3RvckF0dGFjaGVkSGVpZ2h0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9zZXR0aW5ncy0+Z2V0TG9uZyhJbnNwZWN0b3JTZXR0aW5n
czo6SW5zcGVjdG9yQXR0YWNoZWRIZWlnaHQpOwotfQotCi1ib29sIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX3N0YXRl
LT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNv
bnN0IFN0cmluZyYgaW5zcGVjdG9yU3RhdGVDb29raWUpCi17Ci0gICAgbV9zdGF0ZS0+cmVzdG9y
ZUZyb21JbnNwZWN0b3JDb29raWUoaW5zcGVjdG9yU3RhdGVDb29raWUpOwotCi0gICAgaWYgKCFt
X2Zyb250ZW5kKSB7Ci0gICAgICAgIGNvbm5lY3RGcm9udGVuZCgpOwotICAgICAgICBtX2Zyb250
ZW5kLT5mcm9udGVuZFJldXNlZCgpOwotICAgICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxD
aGFuZ2VkKGluc3BlY3RlZFVSTCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9kb21BZ2VudC0+c2V0
RG9jdW1lbnQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSk7Ci0gICAg
ICAgIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpOwotICAgIH0KLQotICAgIG1fcmVzb3VyY2VB
Z2VudCA9IEluc3BlY3RvclJlc291cmNlQWdlbnQ6OnJlc3RvcmUobV9pbnNwZWN0ZWRQYWdlLCBt
X3N0YXRlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKLQotICAgIGlmIChtX3N0YXRlLT5nZXRC
b29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5hYmxlZCkpCi0gICAgICAg
IHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgcmVzdG9yZURlYnVnZ2VyKCk7Ci0gICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVy
UmVzdG9yZVJlc2V0QWdlbnQpOwotICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3Rv
clN0YXRlOjp1c2VySW5pdGlhdGVkUHJvZmlsaW5nKSkKLSAgICAgICAgc3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpp
bnNwZWN0KE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNob3coKTsKLQotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVM
RU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpCi0g
ICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgbV9ub2RlVG9Gb2N1cyA9IG5v
ZGU7Ci0KLSAgICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvY3Vz
Tm9kZSgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZvY3VzTm9kZSgpCi17Ci0g
ICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2Zyb250
ZW5kKTsKLSAgICBBU1NFUlQobV9ub2RlVG9Gb2N1cyk7Ci0KLSAgICBsb25nIGlkID0gbV9kb21B
Z2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtX25vZGVUb0ZvY3VzLmdldCgpKTsKLSAgICBt
X2Zyb250ZW5kLT51cGRhdGVGb2N1c2VkTm9kZShpZCk7Ci0gICAgbV9ub2RlVG9Gb2N1cyA9IDA7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6aGlnaGxpZ2h0KE5vZGUqIG5vZGUpCi17
Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlRfQVJHKG5v
ZGUsIG5vZGUpOwotICAgIG1faGlnaGxpZ2h0ZWROb2RlID0gbm9kZTsKLSAgICBtX2NsaWVudC0+
aGlnaGxpZ2h0KG5vZGUpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdo
dERPTU5vZGUobG9uZyBub2RlSWQpCi17Ci0gICAgTm9kZSogbm9kZSA9IDA7Ci0gICAgaWYgKG1f
ZG9tQWdlbnQgJiYgKG5vZGUgPSBtX2RvbUFnZW50LT5ub2RlRm9ySWQobm9kZUlkKSkpCi0gICAg
ICAgIGhpZ2hsaWdodChub2RlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWdo
bGlnaHRGcmFtZSh1bnNpZ25lZCBsb25nIGZyYW1lSWQpCi17Ci0gICAgRnJhbWUqIG1haW5GcmFt
ZSA9IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCk7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUg
PSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCht
YWluRnJhbWUpKSB7Ci0gICAgICAgIGlmIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZnJh
bWUpID09IGZyYW1lSWQgJiYgZnJhbWUtPm93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBo
aWdobGlnaHQoZnJhbWUtPm93bmVyRWxlbWVudCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpoaWRlSGlnaGxp
Z2h0KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGln
aGxpZ2h0ZWROb2RlID0gMDsKLSAgICBtX2NsaWVudC0+aGlkZUhpZ2hsaWdodCgpOwotfQotCi12
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwg
IXNlYXJjaGluZ0Zvck5vZGVJblBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSog
bm9kZSA9IHJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSkKLSAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgaGlnaGxpZ2h0KG5vZGUpOwotfQotCi1ib29s
IEluc3BlY3RvckNvbnRyb2xsZXI6OmhhbmRsZU1vdXNlUHJlc3MoKQotewotICAgIGlmICghZW5h
YmxlZCgpIHx8ICFzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChtX2hpZ2hsaWdodGVkTm9kZSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4g
bm9kZSA9IG1faGlnaGxpZ2h0ZWROb2RlOwotICAgICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGZh
bHNlKTsKLSAgICAgICAgaW5zcGVjdChub2RlLmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQoUGFzc093blB0cjxJbnNwZWN0b3JGcm9udGVuZENsaWVudD4gY2xpZW50KQotewotICAg
IEFTU0VSVCghbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCk7Ci0gICAgbV9pbnNwZWN0b3JGcm9u
dGVuZENsaWVudCA9IGNsaWVudDsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
bGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUqIGZyYW1lLCBET01XcmFwcGVyV29ybGQqIHdv
cmxkKQotewotICAgIGlmICh3b3JsZCAhPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhZ2UgaXMgc3VwcG9zZWQgdG8gc2VydmUgYXMg
SW5zcGVjdG9yRnJvbnRlbmQgbm90aWZ5IGluc3BldG9yIGZyb250ZW5kCi0gICAgLy8gY2xpZW50
IHRoYXQgaXQncyBjbGVhcmVkIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gZXhwb3NlIGluc3BlY3Rv
ciBiaW5kaW5ncy4KLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENsaWVudCAmJiBmcmFtZSA9
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKQotICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2xpZW50LT53aW5kb3dPYmplY3RDbGVhcmVkKCk7Ci0KLSAgICBpZiAoZW5hYmxlZCgpKSB7
Ci0gICAgICAgIGlmIChtX2Zyb250ZW5kICYmIGZyYW1lID09IG1faW5zcGVjdGVkUGFnZS0+bWFp
bkZyYW1lKCkpCi0gICAgICAgICAgICBtX2luamVjdGVkU2NyaXB0SG9zdC0+ZGlzY2FyZEluamVj
dGVkU2NyaXB0cygpOwotICAgICAgICBpZiAobV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5zaXpl
KCkpIHsKLSAgICAgICAgICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNj
cmlwdFN0YXRlKGZyYW1lKTsKLSAgICAgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJh
dG9yIGl0ID0gbV9zY3JpcHRzVG9FdmFsdWF0ZU9uTG9hZC5iZWdpbigpOwotICAgICAgICAgICAg
ICAgICBpdCAhPSBtX3NjcmlwdHNUb0V2YWx1YXRlT25Mb2FkLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVjdFNjcmlwdCgqaXQsIHNjcmlw
dFN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1faW5z
cGVjdG9yRXh0ZW5zaW9uQVBJLmlzRW1wdHkoKSkKLSAgICAgICAgbV9pbmplY3RlZFNjcmlwdEhv
c3QtPmluamVjdFNjcmlwdChtX2luc3BlY3RvckV4dGVuc2lvbkFQSSwgbWFpbldvcmxkU2NyaXB0
U3RhdGUoZnJhbWUpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRTZWFyY2hp
bmdGb3JOb2RlKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoc2VhcmNoaW5nRm9yTm9kZUluUGFn
ZSgpID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFu
KEluc3BlY3RvclN0YXRlOjpzZWFyY2hpbmdGb3JOb2RlLCBlbmFibGVkKTsKLSAgICBpZiAoIWVu
YWJsZWQpCi0gICAgICAgIGhpZGVIaWdobGlnaHQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpzZXRTZWFyY2hpbmdGb3JOb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUp
Ci17Ci0gICAgKm5ld1N0YXRlID0gZW5hYmxlZDsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVu
YWJsZWQpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgp
Ci17Ci0gICAgbV9vcGVuaW5nRnJvbnRlbmQgPSBmYWxzZTsKLSAgICByZWxlYXNlRnJvbnRlbmRM
aWZldGltZUFnZW50cygpOwotICAgIG1fZnJvbnRlbmQgPSBuZXcgSW5zcGVjdG9yRnJvbnRlbmQo
bV9jbGllbnQpOwotICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1f
aW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKLSAgICBtX3J1bnRp
bWVBZ2VudCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y3JlYXRlKG1faW5qZWN0ZWRTY3JpcHRI
b3N0LmdldCgpKTsKLSAgICBtX2Nzc0FnZW50LT5zZXRET01BZ2VudChtX2RvbUFnZW50LmdldCgp
KTsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBtX2RhdGFiYXNlQWdlbnQgPSBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpjcmVhdGUoJm1fZGF0YWJhc2VSZXNvdXJjZXMsIG1fZnJvbnRlbmQu
Z2V0KCkpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgbV9kb21TdG9y
YWdlQWdlbnQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNyZWF0ZSgmbV9kb21TdG9yYWdl
UmVzb3VyY2VzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgotCi0gICAgaWYgKG1fdGltZWxp
bmVBZ2VudCkKLSAgICAgICAgbV90aW1lbGluZUFnZW50LT5yZXNldEZyb250ZW5kUHJveHlPYmpl
Y3QobV9mcm9udGVuZC5nZXQoKSk7Ci0KLSAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJvbnRlbmQo
bV9mcm9udGVuZC5nZXQoKSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIFdlYiBJbnNwZWN0b3IgdGl0
bGUuCi0gICAgbV9mcm9udGVuZC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKS5z
dHJpbmcoKSk7Ci0KLSNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotICAgIG1f
YXBwbGljYXRpb25DYWNoZUFnZW50ID0gbmV3IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEZJTEVfU1lT
VEVNKQotICAgIG1fZmlsZVN5c3RlbUFnZW50ID0gSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50Ojpj
cmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAoIUlu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpCi0gICAgICAgIFNjcmlwdENv
bnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JVbmNhdWdodEV4Y2VwdGlvbnModHJ1ZSk7
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcm9udGVuZENyZWF0ZWQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fb3BlbmluZ0Zyb250ZW5kKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+YnJpbmdU
b0Zyb250KCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fb3BlbmluZ0Zyb250ZW5kID0gdHJ1ZTsK
LSAgICAgICAgbV9jbGllbnQtPm9wZW5JbnNwZWN0b3JGcm9udGVuZCh0aGlzKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvd1BhbmVsKGNvbnN0IFN0cmluZyYgcGFu
ZWwpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNob3co
KTsKLQotICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAgICBtX3Nob3dBZnRlclZpc2libGUg
PSBwYW5lbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Zyb250ZW5kLT5zaG93UGFu
ZWwocGFuZWwpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKCkKLXsKLSAg
ICBpZiAoIW1fZnJvbnRlbmQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Zyb250ZW5kLT5kaXNj
b25uZWN0RnJvbUJhY2tlbmQoKTsKLSAgICBkaXNjb25uZWN0RnJvbnRlbmQoKTsKLX0KLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNjb25uZWN0RnJvbnRlbmQoKQotewotICAgIGlmICgh
bV9mcm9udGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mcm9udGVuZC5jbGVhcigpOwot
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmcm9udGVuZERlbGV0ZWQoKTsKLSAgICBp
ZiAoIUluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6aGFzRnJvbnRlbmRzKCkpCi0gICAgICAgIFNj
cmlwdENvbnRyb2xsZXI6OnNldENhcHR1cmVDYWxsU3RhY2tGb3JVbmNhdWdodEV4Y2VwdGlvbnMo
ZmFsc2UpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgLy8gSWYgdGhl
IHdpbmRvdyBpcyBiZWluZyBjbG9zZWQgd2l0aCB0aGUgZGVidWdnZXIgZW5hYmxlZCwKLSAgICAv
LyByZW1lbWJlciB0aGlzIHN0YXRlIHRvIHJlLWVuYWJsZSBkZWJ1Z2dlciBvbiB0aGUgbmV4dCB3
aW5kb3cKLSAgICAvLyBvcGVuaW5nLgotICAgIGJvb2wgZGVidWdnZXJXYXNFbmFibGVkID0gZGVi
dWdnZXJFbmFibGVkKCk7Ci0gICAgZGlzYWJsZURlYnVnZ2VyKCk7Ci0gICAgbV9hdHRhY2hEZWJ1
Z2dlcldoZW5TaG93biA9IGRlYnVnZ2VyV2FzRW5hYmxlZDsKLSNlbmRpZgotICAgIHNldFNlYXJj
aGluZ0Zvck5vZGUoZmFsc2UpOwotICAgIHVuYmluZEFsbFJlc291cmNlcygpOwotICAgIHN0b3BU
aW1lbGluZVByb2ZpbGVyKCk7Ci0KLSAgICBoaWRlSGlnaGxpZ2h0KCk7Ci0KLSNpZiBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBtX3Byb2ZpbGVyQWdlbnQtPnNldEZyb250ZW5kKDAp
OwotICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmcodHJ1ZSk7
Ci0jZW5kaWYKLSAgICBtX2NvbnNvbGVBZ2VudC0+c2V0RnJvbnRlbmQoMCk7Ci0KLSAgICByZWxl
YXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwotICAgIG1fdGltZWxpbmVBZ2VudC5jbGVhcigp
OwotICAgIG1fZXh0cmFIZWFkZXJzLmNsZWFyKCk7Ci19Ci0KLUluc3BlY3RvclJlc291cmNlQWdl
bnQqIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlQWdlbnQoKQotewotICAgIGlmICghbV9y
ZXNvdXJjZUFnZW50ICYmIG1fZnJvbnRlbmQpCi0gICAgICAgIG1fcmVzb3VyY2VBZ2VudCA9IElu
c3BlY3RvclJlc291cmNlQWdlbnQ6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UsIG1fc3RhdGUuZ2V0
KCksIG1fZnJvbnRlbmQuZ2V0KCkpOwotICAgIHJldHVybiBtX3Jlc291cmNlQWdlbnQuZ2V0KCk7
Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVB
Z2VudHMoKQotewotICAgIG1fcmVzb3VyY2VBZ2VudC5jbGVhcigpOwotICAgIG1fcnVudGltZUFn
ZW50LmNsZWFyKCk7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBpbnZva2VkIHByaW9yIHRvIG1f
ZG9tQWdlbnQgZGVzdHJ1Y3Rpb24uCi0gICAgbV9jc3NBZ2VudC0+c2V0RE9NQWdlbnQoMCk7Ci0K
LSAgICAvLyBtX2RvbUFnZW50IGlzIFJlZlB0ci4gUmVtb3ZlIERPTSBsaXN0ZW5lcnMgZmlyc3Qg
dG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlCi0gICAgLy8gbm8gcmVmZXJlbmNlcyB0byB0aGUgRE9N
IGFnZW50IGZyb20gdGhlIERPTSB0cmVlLgotICAgIGlmIChtX2RvbUFnZW50KQotICAgICAgICBt
X2RvbUFnZW50LT5yZXNldCgpOwotICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKLQotI2lmIEVOQUJM
RShEQVRBQkFTRSkKLSAgICBpZiAobV9kYXRhYmFzZUFnZW50KQotICAgICAgICBtX2RhdGFiYXNl
QWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKLSAgICBtX2RhdGFiYXNlQWdlbnQuY2xlYXIoKTsKLSNl
bmRpZgotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQotICAgIG1fZG9tU3RvcmFnZUFnZW50LmNs
ZWFyKCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0g
ICAgbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQuY2xlYXIoKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KEZJTEVfU1lTVEVNKQotICAgIGlmIChtX2ZpbGVTeXN0ZW1BZ2VudCkKLSAgICAgICAgbV9maWxl
U3lzdGVtQWdlbnQtPnN0b3AoKTsgCi0gICAgICAgIG1fZmlsZVN5c3RlbUFnZW50LmNsZWFyKCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1bGF0ZVNjcmlwdE9i
amVjdHMoKQotewotICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKLSAgICBpZiAoIW1fZnJvbnRlbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zaG93QWZ0ZXJWaXNpYmxlLmlzRW1wdHko
KSkgewotICAgICAgICBzaG93UGFuZWwobV9zaG93QWZ0ZXJWaXNpYmxlKTsKLSAgICAgICAgbV9z
aG93QWZ0ZXJWaXNpYmxlID0gIiI7Ci0gICAgfQotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCi0gICAgaWYgKG1fcHJvZmlsZXJBZ2VudC0+ZW5hYmxlZCgpKQotICAgICAgICBtX2Zy
b250ZW5kLT5wcm9maWxlcldhc0VuYWJsZWQoKTsKLSNlbmRpZgotCi0gICAgcHVzaERhdGFDb2xs
ZWN0ZWRPZmZsaW5lKCk7Ci0KLSAgICBpZiAobV9ub2RlVG9Gb2N1cykKLSAgICAgICAgZm9jdXNO
b2RlKCk7Ci0KLSAgICAvLyBEaXNwYXRjaCBwZW5kaW5nIGZyb250ZW5kIGNvbW1hbmRzCi0gICAg
Zm9yIChWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5n
RXZhbHVhdGVUZXN0Q29tbWFuZHMuYmVnaW4oKTsgaXQgIT0gbV9wZW5kaW5nRXZhbHVhdGVUZXN0
Q29tbWFuZHMuZW5kKCk7ICsraXQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCk7Ci0gICAgbV9wZW5kaW5nRXZh
bHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKLQotICAgIHJlc3RvcmVEZWJ1Z2dlcigpOwotICAg
IHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVOb0FjdGlvbik7Ci19Ci0KLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkKLXsKLSAgICBtX2Rv
bUFnZW50LT5zZXREb2N1bWVudChtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVu
dCgpKTsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgZGF0YWJhc2VzRW5kID0gbV9kYXRhYmFzZVJlc291cmNlcy5lbmQoKTsKLSAgICBm
b3IgKERhdGFiYXNlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VSZXNvdXJj
ZXMuYmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VzRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25k
LT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRvbVN0b3JhZ2VFbmQgPSBt
X2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChET01TdG9yYWdlUmVzb3VyY2Vz
TWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5iZWdpbigpOyBpdCAhPSBk
b21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5iaW5kKG1fZnJvbnRlbmQu
Z2V0KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIEVOQUJM
RShXT1JLRVJTKQotICAgIFdvcmtlcnNNYXA6Oml0ZXJhdG9yIHdvcmtlcnNFbmQgPSBtX3dvcmtl
cnMuZW5kKCk7Ci0gICAgZm9yIChXb3JrZXJzTWFwOjppdGVyYXRvciBpdCA9IG1fd29ya2Vycy5i
ZWdpbigpOyBpdCAhPSB3b3JrZXJzRW5kOyArK2l0KSB7Ci0gICAgICAgIEluc3BlY3Rvcldvcmtl
clJlc291cmNlKiB3b3JrZXIgPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICBtX2Zyb250ZW5k
LT5kaWRDcmVhdGVXb3JrZXIod29ya2VyLT5pZCgpLCB3b3JrZXItPnVybCgpLCB3b3JrZXItPmlz
U2hhcmVkV29ya2VyKCkpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OnJlc3RvcmVEZWJ1Z2dlcigpCi17Ci0gICAgQVNTRVJUKG1fZnJvbnRlbmQpOwotI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGlmIChJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50Ojppc0RlYnVnZ2VyQWx3YXlzRW5hYmxlZCgpIHx8IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hv
d24gfHwgbV9zZXR0aW5ncy0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6RGVidWdnZXJB
bHdheXNFbmFibGVkKSkgewotICAgICAgICBlbmFibGVEZWJ1Z2dlcihmYWxzZSk7Ci0gICAgICAg
IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24gPSBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3Jl
QWN0aW9uIGFjdGlvbikKLXsKLSAgICBBU1NFUlQobV9mcm9udGVuZCk7Ci0jaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgbV9wcm9maWxlckFnZW50LT5zZXRGcm9udGVuZChtX2Zy
b250ZW5kLmdldCgpKTsKLSAgICBpZiAoIVNjcmlwdFByb2ZpbGVyOjppc1Byb2ZpbGVyQWx3YXlz
RW5hYmxlZCgpICYmIG1fc2V0dGluZ3MtPmdldEJvb2xlYW4oSW5zcGVjdG9yU2V0dGluZ3M6OlBy
b2ZpbGVyQWx3YXlzRW5hYmxlZCkpCi0gICAgICAgIGVuYWJsZVByb2ZpbGVyKCk7Ci0gICAgaWYg
KGFjdGlvbiA9PSBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50KQotICAgICAgICBtX3Byb2ZpbGVy
QWdlbnQtPnJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6dW5iaW5kQWxsUmVzb3VyY2VzKCkKLXsKLSNpZiBFTkFCTEUoREFUQUJB
U0UpCi0gICAgRGF0YWJhc2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1f
ZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6
aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNl
c0VuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+dW5iaW5kKCk7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgRE9NU3RvcmFnZVJlc291cmNlc01hcDo6aXRlcmF0b3Ig
ZG9tU3RvcmFnZUVuZCA9IG1fZG9tU3RvcmFnZVJlc291cmNlcy5lbmQoKTsKLSAgICBmb3IgKERP
TVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kb21TdG9yYWdlUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGRvbVN0b3JhZ2VFbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQt
PnVuYmluZCgpOwotI2VuZGlmCi0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkKLSAgICAgICAgbV90
aW1lbGluZUFnZW50LT5yZXNldCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKLXsKLSAgICBpZiAoIWVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKLSAgICAgICAg
bV9yZXNvdXJjZUFnZW50LT5kaWRDb21taXRMb2FkKGxvYWRlcik7Ci0gICAgCi0gICAgQVNTRVJU
KG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBpZiAobG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVj
dGVkUGFnZS0+bWFpbkZyYW1lKCkpIHsKLSAgICAgICAgaWYgKG1fZnJvbnRlbmQpCi0gICAgICAg
ICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5n
KCkpOwotCi0gICAgICAgIG1faW5qZWN0ZWRTY3JpcHRIb3N0LT5kaXNjYXJkSW5qZWN0ZWRTY3Jp
cHRzKCk7Ci0gICAgICAgIG1fY29uc29sZUFnZW50LT5yZXNldCgpOwotCi0jaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKLSAgICAg
ICAgICAgIG1fZGVidWdnZXJBZ2VudC0+Y2xlYXJGb3JQYWdlTmF2aWdhdGlvbigpOwotICAgICAg
ICAgICAgaWYgKG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgbV9icm93
c2VyRGVidWdnZXJBZ2VudC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChpbnNwZWN0ZWRVUkwoKSk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYmIFVT
RShKU0MpCi0gICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxp
bmcodHJ1ZSk7Ci0gICAgICAgIG1fcHJvZmlsZXJBZ2VudC0+cmVzZXRTdGF0ZSgpOwotI2VuZGlm
Ci0KLSAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3Jl
IGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQotICAgICAgICAvLyByZXNvdXJjZXMgYXJlIGNsZWFy
ZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRoZW0uCi0gICAgICAgIHVuYmlu
ZEFsbFJlc291cmNlcygpOwotCi0gICAgICAgIGlmIChtX2Zyb250ZW5kKSB7Ci0gICAgICAgICAg
ICBtX2Zyb250ZW5kLT5yZXNldCgpOwotICAgICAgICAgICAgbV9kb21BZ2VudC0+cmVzZXQoKTsK
LSAgICAgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7Ci0gICAgICAgIH0KLSNpZiBFTkFCTEUo
V09SS0VSUykKLSAgICAgICAgbV93b3JrZXJzLmNsZWFyKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
REFUQUJBU0UpCi0gICAgICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuY2xlYXIoKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgbV9kb21TdG9yYWdlUmVzb3VyY2VzLmNs
ZWFyKCk7Ci0jZW5kaWYKLQotICAgICAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgICAgIG1f
ZG9tQWdlbnQtPnNldERvY3VtZW50KG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmRvY3Vt
ZW50KCkpOwotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptYWluUmVzb3Vy
Y2VGaXJlZERPTUNvbnRlbnRFdmVudChEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBLVVJM
JiB1cmwpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkgfHwgIWlzTWFpblJlc291cmNlTG9hZGVyKGxv
YWRlciwgdXJsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fdGltZWxpbmVBZ2VudCkK
LSAgICAgICAgbV90aW1lbGluZUFnZW50LT5kaWRNYXJrRE9NQ29udGVudEV2ZW50KCk7Ci0gICAg
aWYgKG1fZnJvbnRlbmQpCi0gICAgICAgIG1fZnJvbnRlbmQtPmRvbUNvbnRlbnRFdmVudEZpcmVk
KGN1cnJlbnRUaW1lKCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om1haW5SZXNv
dXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IEtVUkwmIHVy
bCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSB8fCAhaXNNYWluUmVzb3VyY2VMb2FkZXIobG9hZGVy
LCB1cmwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV90aW1lbGluZUFnZW50KQotICAg
ICAgICBtX3RpbWVsaW5lQWdlbnQtPmRpZE1hcmtMb2FkRXZlbnQoKTsKLSAgICBpZiAobV9mcm9u
dGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+bG9hZEV2ZW50RmlyZWQoY3VycmVudFRpbWUoKSk7
Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aXNNYWluUmVzb3VyY2VMb2FkZXIoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgS1VSTCYgcmVxdWVzdFVybCkKLXsKLSAgICByZXR1
cm4gbG9hZGVyLT5mcmFtZSgpID09IG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCkgJiYgcmVx
dWVzdFVybCA9PSBsb2FkZXItPnJlcXVlc3RVUkwoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAg
IGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9mcm9udGVuZCkg
ewotICAgICAgICAvLyBPbmx5IGVuYWJsZSBsb2FkIHRpbWluZyBhbmQgcmF3IGhlYWRlcnMgaWYg
ZnJvbnQtZW5kIGlzIGF0dGFjaGVkLCBhcyBvdGhlcndpc2Ugd2UgbWF5IHByb2R1Y2Ugb3Zlcmhl
YWQuCi0gICAgICAgIHJlcXVlc3Quc2V0UmVwb3J0TG9hZFRpbWluZyh0cnVlKTsKLSAgICAgICAg
cmVxdWVzdC5zZXRSZXBvcnRSYXdIZWFkZXJzKHRydWUpOwotCi0gICAgICAgIGlmIChtX2V4dHJh
SGVhZGVycykgewotICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9leHRyYUhlYWRlcnMtPmVuZCgpOwotICAgICAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZXh0cmFIZWFkZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaXQtPmZp
cnN0LCBpdC0+c2Vjb25kKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjplbnN1cmVTZXR0aW5nc0xvYWRlZCgpCi17Ci0gICAgaWYgKG1fc2V0dGluZ3Mp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3NldHRpbmdzID0gbmV3IEluc3BlY3RvclNldHRpbmdz
KG1fY2xpZW50KTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjptb25p
dG9yaW5nWEhSLCBtX3NldHRpbmdzLT5nZXRCb29sZWFuKEluc3BlY3RvclNldHRpbmdzOjpNb25p
dG9yaW5nWEhSRW5hYmxlZCkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VGltZWxpbmVQcm9maWxlcigpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
dGltZWxpbmVBZ2VudCA9IG5ldyBJbnNwZWN0b3JUaW1lbGluZUFnZW50KG1fZnJvbnRlbmQuZ2V0
KCkpOwotICAgIGlmIChtX2Zyb250ZW5kKQotICAgICAgICBtX2Zyb250ZW5kLT50aW1lbGluZVBy
b2ZpbGVyV2FzU3RhcnRlZCgpOwotCi0gICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JT
dGF0ZTo6dGltZWxpbmVQcm9maWxlckVuYWJsZWQsIHRydWUpOwotfQotCi12b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BUaW1lbGluZVByb2ZpbGVyKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3RpbWVsaW5lQWdlbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdGltZWxpbmVBZ2VudCA9IDA7Ci0gICAgaWYgKG1fZnJvbnRlbmQp
Ci0gICAgICAgIG1fZnJvbnRlbmQtPnRpbWVsaW5lUHJvZmlsZXJXYXNTdG9wcGVkKCk7Ci0KLSAg
ICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp0aW1lbGluZVByb2ZpbGVyRW5h
YmxlZCwgZmFsc2UpOwotfQotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi1jbGFzcyBQb3N0V29ya2Vy
Tm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8UG9zdFdvcmtlck5vdGlm
aWNhdGlvblRvRnJvbnRlbmRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gYWN0aW9u
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9u
dGVuZFRhc2sod29ya2VyLCBhY3Rpb24pOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBQb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2soUGFzc1JlZlB0cjxJbnNwZWN0b3JXb3JrZXJS
ZXNvdXJjZT4gd29ya2VyLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24gYWN0aW9u
KQotICAgICAgICA6IG1fd29ya2VyKHdvcmtlcikKLSAgICAgICAgLCBtX2FjdGlvbihhY3Rpb24p
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHNjcmlwdENv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvciA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0Q29udGV4dCktPnBh
Z2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgIGluc3BlY3Rvci0+
cG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmQoKm1fd29ya2VyLCBtX2FjdGlvbik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJl
c291cmNlPiBtX3dvcmtlcjsKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJBY3Rpb24g
bV9hY3Rpb247Ci19OwotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnBvc3RXb3JrZXJOb3Rp
ZmljYXRpb25Ub0Zyb250ZW5kKGNvbnN0IEluc3BlY3RvcldvcmtlclJlc291cmNlJiB3b3JrZXIs
IEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckFjdGlvbiBhY3Rpb24pCi17Ci0gICAgaWYgKCFt
X2Zyb250ZW5kKQotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCi0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIEluc3BlY3RvckNvbnRyb2xsZXI6
OldvcmtlckNyZWF0ZWQ6Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENyZWF0ZVdvcmtlcih3b3Jr
ZXIuaWQoKSwgd29ya2VyLnVybCgpLCB3b3JrZXIuaXNTaGFyZWRXb3JrZXIoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yQ29udHJvbGxlcjo6V29ya2VyRGVzdHJveWVkOgot
ICAgICAgICBtX2Zyb250ZW5kLT5kaWREZXN0cm95V29ya2VyKHdvcmtlci5pZCgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ3JlYXRlV29ya2VyKGludHB0cl90IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1No
YXJlZFdvcmtlcikKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEluc3BlY3RvcldvcmtlclJlc291cmNlPiB3b3JrZXJSZXNvdXJjZShJbnNwZWN0
b3JXb3JrZXJSZXNvdXJjZTo6Y3JlYXRlKGlkLCB1cmwsIGlzU2hhcmVkV29ya2VyKSk7Ci0gICAg
bV93b3JrZXJzLnNldChpZCwgd29ya2VyUmVzb3VyY2UpOwotICAgIGlmIChtX2luc3BlY3RlZFBh
Z2UgJiYgbV9mcm9udGVuZCkKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+
ZG9jdW1lbnQoKS0+cG9zdFRhc2soUG9zdFdvcmtlck5vdGlmaWNhdGlvblRvRnJvbnRlbmRUYXNr
OjpjcmVhdGUod29ya2VyUmVzb3VyY2UsIEluc3BlY3RvckNvbnRyb2xsZXI6OldvcmtlckNyZWF0
ZWQpKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWREZXN0cm95V29ya2VyKGlu
dHB0cl90IGlkKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBXb3JrZXJzTWFwOjppdGVyYXRvciB3b3JrZXJSZXNvdXJjZSA9IG1fd29ya2Vycy5maW5kKGlk
KTsKLSAgICBpZiAod29ya2VyUmVzb3VyY2UgPT0gbV93b3JrZXJzLmVuZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKG1faW5zcGVjdGVkUGFnZSAmJiBtX2Zyb250ZW5kKQotICAgICAgICBt
X2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT5wb3N0VGFzayhQb3N0V29y
a2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZFRhc2s6OmNyZWF0ZSh3b3JrZXJSZXNvdXJjZS0+c2Vj
b25kLCBJbnNwZWN0b3JDb250cm9sbGVyOjpXb3JrZXJEZXN0cm95ZWQpKTsKLSAgICBtX3dvcmtl
cnMucmVtb3ZlKHdvcmtlclJlc291cmNlKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
LQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkT3Bl
bkRhdGFiYXNlKFBhc3NSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pCi17Ci0gICAg
aWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlPiByZXNvdXJjZSA9IEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U6OmNy
ZWF0ZShkYXRhYmFzZSwgZG9tYWluLCBuYW1lLCB2ZXJzaW9uKTsKLQotICAgIG1fZGF0YWJhc2VS
ZXNvdXJjZXMuc2V0KHJlc291cmNlLT5pZCgpLCByZXNvdXJjZSk7Ci0KLSAgICAvLyBSZXNvdXJj
ZXMgYXJlIG9ubHkgYm91bmQgd2hpbGUgdmlzaWJsZS4KLSAgICBpZiAobV9mcm9udGVuZCkKLSAg
ICAgICAgcmVzb3VyY2UtPmJpbmQobV9mcm9udGVuZC5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGNvb2tpZXMsIFdURjo6U3RyaW5nKiBjb29raWVzU3RyaW5nKQotewotICAgIC8vIElmIHdlIGNh
biBnZXQgcmF3IGNvb2tpZXMuCi0gICAgTGlzdEhhc2hTZXQ8Q29va2llPiByYXdDb29raWVzTGlz
dDsKLQotICAgIC8vIElmIHdlIGNhbid0IGdldCByYXcgY29va2llcyAtIGZhbGwgYmFjayB0byBT
dHJpbmcgcmVwcmVzZW50YXRpb24KLSAgICBTdHJpbmcgc3RyaW5nQ29va2llc0xpc3Q7Ci0KLSAg
ICAvLyBSZXR1cm4gdmFsdWUgdG8gZ2V0UmF3Q29va2llcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9y
IGV2ZXJ5IGNhbGwgYmVjYXVzZQotICAgIC8vIHRoZSByZXR1cm4gdmFsdWUgaXMgcGxhdGZvcm0v
bmV0d29yayBiYWNrZW5kIHNwZWNpZmljLCBhbmQgdGhlIGNhbGwgd2lsbAotICAgIC8vIGFsd2F5
cyByZXR1cm4gdGhlIHNhbWUgdHJ1ZS9mYWxzZSB2YWx1ZS4KLSAgICBib29sIHJhd0Nvb2tpZXNJ
bXBsZW1lbnRlZCA9IGZhbHNlOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2luc3BlY3Rl
ZFBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJz
ZU5leHQobV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkpIHsKLSAgICAgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgICAgIGNvbnN0IENhY2hlZFJlc291
cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwJiBhbGxSZXNvdXJjZXMgPSBkb2N1bWVudC0+
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+YWxsQ2FjaGVkUmVzb3VyY2VzKCk7Ci0gICAgICAgIENh
Y2hlZFJlc291cmNlTG9hZGVyOjpEb2N1bWVudFJlc291cmNlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBhbGxSZXNvdXJjZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsUmVzb3VyY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4g
ZG9jQ29va2llc0xpc3Q7Ci0gICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRS
YXdDb29raWVzKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJs
KCkpLCBkb2NDb29raWVzTGlzdCk7Ci0KLSAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxl
bWVudGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24g
Y2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KLSAgICAg
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBzdHJpbmdD
b29raWVzTGlzdCArPSBkb2N1bWVudC0+Y29va2llKGVjKTsKLSAgICAgICAgICAgICAgICAvLyBF
eGNlcHRpb25zIGFyZSB0aHJvd24gYnkgY29va2llKCkgaW4gc2FuZGJveGVkIGZyYW1lcy4gVGhh
dCB3b24ndCBoYXBwZW4gaGVyZQotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgImRvY3VtZW50
IiBpcyB0aGUgZG9jdW1lbnQgb2YgdGhlIG1haW4gZnJhbWUgb2YgdGhlIHBhZ2UuCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGludCBjb29raWVzU2l6ZSA9IGRvY0Nvb2tpZXNMaXN0LnNpemUoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvb2tpZXNTaXplOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFyYXdDb29raWVzTGlzdC5jb250YWlucyhkb2NDb29raWVzTGlzdFtpXSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByYXdDb29raWVzTGlzdC5hZGQoZG9jQ29va2llc0xp
c3RbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChyYXdDb29raWVzSW1wbGVtZW50ZWQpCi0gICAgICAgICpjb29raWVzID0g
YnVpbGRBcnJheUZvckNvb2tpZXMocmF3Q29va2llc0xpc3QpOwotICAgIGVsc2UKLSAgICAgICAg
KmNvb2tpZXNTdHJpbmcgPSBzdHJpbmdDb29raWVzTGlzdDsKLX0KLQotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gSW5zcGVjdG9yQ29udHJvbGxlcjo6YnVpbGRBcnJheUZvckNvb2tpZXMoTGlz
dEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBjb29raWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotCi0gICAgTGlzdEhhc2hT
ZXQ8Q29va2llPjo6aXRlcmF0b3IgZW5kID0gY29va2llc0xpc3QuZW5kKCk7Ci0gICAgTGlzdEhh
c2hTZXQ8Q29va2llPjo6aXRlcmF0b3IgaXQgPSBjb29raWVzTGlzdC5iZWdpbigpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpdCAhPSBlbmQ7ICsraXQsIGkrKykKLSAgICAgICAgY29va2llcy0+cHVz
aE9iamVjdChidWlsZE9iamVjdEZvckNvb2tpZSgqaXQpKTsKLQotICAgIHJldHVybiBjb29raWVz
OwotfQotCi1QYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ29udHJvbGxlcjo6
YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCi17Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IHZhbHVlLT5zZXRTdHJpbmcoIm5hbWUiLCBjb29raWUubmFtZSk7Ci0gICAgdmFsdWUtPnNldFN0
cmluZygidmFsdWUiLCBjb29raWUudmFsdWUpOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoImRvbWFp
biIsIGNvb2tpZS5kb21haW4pOwotICAgIHZhbHVlLT5zZXRTdHJpbmcoInBhdGgiLCBjb29raWUu
cGF0aCk7Ci0gICAgdmFsdWUtPnNldE51bWJlcigiZXhwaXJlcyIsIGNvb2tpZS5leHBpcmVzKTsK
LSAgICB2YWx1ZS0+c2V0TnVtYmVyKCJzaXplIiwgKGNvb2tpZS5uYW1lLmxlbmd0aCgpICsgY29v
a2llLnZhbHVlLmxlbmd0aCgpKSk7Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oImh0dHBPbmx5Iiwg
Y29va2llLmh0dHBPbmx5KTsKLSAgICB2YWx1ZS0+c2V0Qm9vbGVhbigic2VjdXJlIiwgY29va2ll
LnNlY3VyZSk7Ci0gICAgdmFsdWUtPnNldEJvb2xlYW4oInNlc3Npb24iLCBjb29raWUuc2Vzc2lv
bik7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRl
bGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KQotewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1faW5zcGVjdGVk
UGFnZS0+bWFpbkZyYW1lKCkpKSB7Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoZG9jdW1lbnQtPnVybCgpLmhvc3QoKSAhPSBkb21h
aW4pCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXAmIGFsbFJlc291cmNlcyA9IGRvY3VtZW50LT5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLT5hbGxDYWNoZWRSZXNvdXJjZXMoKTsKLSAgICAgICAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OkRvY3VtZW50UmVzb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGFsbFJlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9yIChDYWNoZWRSZXNvdXJjZUxvYWRlcjo6
RG9jdW1lbnRSZXNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxSZXNvdXJjZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2ll
KGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgaXQtPnNlY29uZC0+dXJsKCkpLCBjb29r
aWVOYW1lKTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi12b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVh
LCBib29sIGlzTG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgaWYgKCFlbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERPTVN0b3JhZ2VSZXNvdXJjZXNNYXA6Oml0ZXJh
dG9yIGRvbVN0b3JhZ2VFbmQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMuZW5kKCk7Ci0gICAgZm9y
IChET01TdG9yYWdlUmVzb3VyY2VzTWFwOjppdGVyYXRvciBpdCA9IG1fZG9tU3RvcmFnZVJlc291
cmNlcy5iZWdpbigpOyBpdCAhPSBkb21TdG9yYWdlRW5kOyArK2l0KQotICAgICAgICBpZiAoaXQt
PnNlY29uZC0+aXNTYW1lSG9zdEFuZFR5cGUoZnJhbWUsIGlzTG9jYWxTdG9yYWdlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTdG9yYWdlPiBkb21TdG9yYWdlID0gU3RvcmFn
ZTo6Y3JlYXRlKGZyYW1lLCBzdG9yYWdlQXJlYSk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckRPTVN0
b3JhZ2VSZXNvdXJjZT4gcmVzb3VyY2UgPSBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OmNy
ZWF0ZShkb21TdG9yYWdlLmdldCgpLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpOwotCi0gICAgbV9k
b21TdG9yYWdlUmVzb3VyY2VzLnNldChyZXNvdXJjZS0+aWQoKSwgcmVzb3VyY2UpOwotCi0gICAg
Ly8gUmVzb3VyY2VzIGFyZSBvbmx5IGJvdW5kIHdoaWxlIHZpc2libGUuCi0gICAgaWYgKG1fZnJv
bnRlbmQpCi0gICAgICAgIHJlc291cmNlLT5iaW5kKG1fZnJvbnRlbmQuZ2V0KCkpOwotfQotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEtVUkwm
IHJlcXVlc3RVUkwsIGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKQotewotICAgIGlmICghZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAg
ICBpZiAobV9yZXNvdXJjZUFnZW50KQotICAgICAgICBtX3Jlc291cmNlQWdlbnQtPmRpZENyZWF0
ZVdlYlNvY2tldChpZGVudGlmaWVyLCByZXF1ZXN0VVJMKTsKLSAgICBVTlVTRURfUEFSQU0oZG9j
dW1lbnRVUkwpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OndpbGxTZW5kV2ViU29j
a2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2VBZ2Vu
dCkKLSAgICAgICAgbV9yZXNvdXJjZUFnZW50LT53aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJl
cXVlc3QoaWRlbnRpZmllciwgcmVxdWVzdCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgY29uc3QgV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UmIHJlc3BvbnNlKQotewot
ICAgIGlmIChtX3Jlc291cmNlQWdlbnQpCi0gICAgICAgIG1fcmVzb3VyY2VBZ2VudC0+ZGlkUmVj
ZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKGlkZW50aWZpZXIsIHJlc3BvbnNlKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDbG9zZVdlYlNvY2tldCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKG1fcmVzb3VyY2VBZ2VudCkKLSAgICAgICAgbV9y
ZXNvdXJjZUFnZW50LT5kaWRDbG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKLX0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0KLSNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
LWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6aXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmls
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJvZmlsZXJBZ2VudC0+aXNSZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZSgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0
VXNlckluaXRpYXRlZFByb2ZpbGluZygpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3Byb2ZpbGVyQWdlbnQtPnN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGlu
ZygpOwotICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0
ZWRQcm9maWxpbmcsIHRydWUpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BV
c2VySW5pdGlhdGVkUHJvZmlsaW5nKCkKLXsKLSAgICBpZiAoIWVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fcHJvZmlsZXJBZ2VudC0+c3RvcFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KTsKLSAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5pdGlhdGVk
UHJvZmlsaW5nLCBmYWxzZSk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6cHJvZmls
ZXJFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZW5hYmxlZCgpICYmIG1fcHJvZmlsZXJB
Z2VudC0+ZW5hYmxlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuYWJsZVBy
b2ZpbGVyKGJvb2wgYWx3YXlzLCBib29sIHNraXBSZWNvbXBpbGUpCi17Ci0gICAgaWYgKGFsd2F5
cykKLSAgICAgICAgbV9zZXR0aW5ncy0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6UHJv
ZmlsZXJBbHdheXNFbmFibGVkLCB0cnVlKTsKLSAgICBtX3Byb2ZpbGVyQWdlbnQtPmVuYWJsZShz
a2lwUmVjb21waWxlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlUHJv
ZmlsZXIoYm9vbCBhbHdheXMpCi17Ci0gICAgaWYgKGFsd2F5cykKLSAgICAgICAgbV9zZXR0aW5n
cy0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTZXR0aW5nczo6UHJvZmlsZXJBbHdheXNFbmFibGVkLCBm
YWxzZSk7Ci0gICAgbV9wcm9maWxlckFnZW50LT5kaXNhYmxlKCk7Ci19Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
aG93QW5kRW5hYmxlRGVidWdnZXIoKQotewotICAgIGlmICghZW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoZGVidWdnZXJFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICghbV9mcm9udGVuZCkgewotICAgICAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
ID0gdHJ1ZTsKLSAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQYW5lbCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGVuYWJsZURlYnVnZ2VyKGZhbHNlKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjplbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cykKLXsKLSAgICBBU1NFUlQoIWRlYnVnZ2Vy
RW5hYmxlZCgpKTsKLSAgICBpZiAoYWx3YXlzKQotICAgICAgICBtX3NldHRpbmdzLT5zZXRCb29s
ZWFuKEluc3BlY3RvclNldHRpbmdzOjpEZWJ1Z2dlckFsd2F5c0VuYWJsZWQsIHRydWUpOwotCi0g
ICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5nZXQoKSk7Ci0gICAg
bV9icm93c2VyRGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50Ojpj
cmVhdGUodGhpcyk7Ci0gICAgbV9icm93c2VyRGVidWdnZXJBZ2VudC0+aW5zcGVjdGVkVVJMQ2hh
bmdlZChpbnNwZWN0ZWRVUkwoKSk7Ci0KLSAgICBtX2Zyb250ZW5kLT5kZWJ1Z2dlcldhc0VuYWJs
ZWQoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaXNhYmxlRGVidWdnZXIoYm9v
bCBhbHdheXMpCi17Ci0gICAgaWYgKCFlbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChhbHdheXMpCi0gICAgICAgIG1fc2V0dGluZ3MtPnNldEJvb2xlYW4oSW5zcGVjdG9yU2V0
dGluZ3M6OkRlYnVnZ2VyQWx3YXlzRW5hYmxlZCwgZmFsc2UpOwotCi0gICAgQVNTRVJUKG1faW5z
cGVjdGVkUGFnZSk7Ci0KLSAgICBtX2RlYnVnZ2VyQWdlbnQuY2xlYXIoKTsKLSAgICBtX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50LmNsZWFyKCk7Ci0KLSAgICBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3du
ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZGVi
dWdnZXJXYXNEaXNhYmxlZCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Vt
ZSgpCi17Ci0gICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50
LT5yZXN1bWUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRBbGxCcm93c2Vy
QnJlYWtwb2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQotewot
ICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFrcG9pbnRz
LCBicmVha3BvaW50cyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpl
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlw
dCkKLXsKLSAgICBpZiAobV9mcm9udGVuZCkKLSAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChjYWxsSWQsIHNjcmlwdCk7Ci0gICAgZWxzZQotICAgICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5hcHBlbmQocGFpcjxsb25nLCBTdHJpbmc+KGNhbGxJ
ZCwgc2NyaXB0KSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBqc29uUmVzdWx0KQot
ewotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2UoZGVi
dWdnZXJXb3JsZCgpLCBtX2luc3BlY3RlZFBhZ2UpOwotICAgIFNjcmlwdE9iamVjdCB3aW5kb3c7
Ci0gICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoc2NyaXB0U3RhdGUsICJ3aW5kb3ciLCB3aW5k
b3cpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbih3aW5kb3csICJkaWRFdmFsdWF0
ZUZvclRlc3RJbkZyb250ZW5kIik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElk
KTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChqc29uUmVzdWx0KTsKLSAgICBmdW5jdGlv
bi5jYWxsKCk7Ci19Ci0KLXN0YXRpYyBQYXRoIHF1YWRUb1BhdGgoY29uc3QgRmxvYXRRdWFkJiBx
dWFkKQotewotICAgIFBhdGggcXVhZFBhdGg7Ci0gICAgcXVhZFBhdGgubW92ZVRvKHF1YWQucDEo
KSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDIoKSk7Ci0gICAgcXVhZFBhdGguYWRk
TGluZVRvKHF1YWQucDMoKSk7Ci0gICAgcXVhZFBhdGguYWRkTGluZVRvKHF1YWQucDQoKSk7Ci0g
ICAgcXVhZFBhdGguY2xvc2VTdWJwYXRoKCk7Ci0gICAgcmV0dXJuIHF1YWRQYXRoOwotfQotCi1z
dGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgRmxvYXRRdWFkJiBxdWFkLCBjb25zdCBDb2xvciYgZmlsbENvbG9yKQotewotICAgIHN0YXRp
YyBjb25zdCBpbnQgb3V0bGluZVRoaWNrbmVzcyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9y
IG91dGxpbmVDb2xvcig2MiwgODYsIDE4MCwgMjI4KTsKLQotICAgIFBhdGggcXVhZFBhdGggPSBx
dWFkVG9QYXRoKHF1YWQpOwotCi0gICAgLy8gQ2xpcCBvdXQgdGhlIHF1YWQsIHRoZW4gZHJhdyB3
aXRoIGEgMnB4IHN0cm9rZSB0byBnZXQgYSBwaXhlbAotICAgIC8vIG9mIG91dGxpbmUgKGJlY2F1
c2UgaW5mbGF0aW5nIGEgcXVhZCBpcyBoYXJkKQotICAgIHsKLSAgICAgICAgY29udGV4dC5zYXZl
KCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcE91dChxdWFkUGF0aCk7Ci0KLSAgICAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3Mob3V0bGluZVRoaWNrbmVzcyk7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3Iob3V0bGluZUNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHF1YWRQYXRoKTsKLQotICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgZG8gdGhlIGZpbGwKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihmaWxsQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgIGNvbnRleHQuZmls
bFBhdGgocXVhZFBhdGgpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0aENs
aXAoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQsIGNvbnN0
IEZsb2F0UXVhZCYgY2xpcFF1YWQsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IpCi17Ci0gICAgY29u
dGV4dC5zYXZlKCk7Ci0gICAgUGF0aCBjbGlwUXVhZFBhdGggPSBxdWFkVG9QYXRoKGNsaXBRdWFk
KTsKLSAgICBjb250ZXh0LmNsaXBPdXQoY2xpcFF1YWRQYXRoKTsKLSAgICBkcmF3T3V0bGluZWRR
dWFkKGNvbnRleHQsIHF1YWQsIGZpbGxDb2xvcik7Ci0gICAgY29udGV4dC5yZXN0b3JlKCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIGRyYXdIaWdobGlnaHRGb3JCb3goR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBGbG9hdFF1YWQmIGNvbnRlbnRRdWFkLCBjb25zdCBGbG9hdFF1YWQmIHBhZGRp
bmdRdWFkLCBjb25zdCBGbG9hdFF1YWQmIGJvcmRlclF1YWQsIGNvbnN0IEZsb2F0UXVhZCYgbWFy
Z2luUXVhZCkKLXsKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgY29udGVudEJveENvbG9yKDEyNSwg
MTczLCAyMTcsIDEyOCk7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHBhZGRpbmdCb3hDb2xvcigx
MjUsIDE3MywgMjE3LCAxNjApOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3JkZXJCb3hDb2xv
cigxMjUsIDE3MywgMjE3LCAxOTIpOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciBtYXJnaW5Cb3hD
b2xvcigxMjUsIDE3MywgMjE3LCAyMjgpOwotCi0gICAgaWYgKG1hcmdpblF1YWQgIT0gYm9yZGVy
UXVhZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIG1hcmdpblF1
YWQsIGJvcmRlclF1YWQsIG1hcmdpbkJveENvbG9yKTsKLSAgICBpZiAoYm9yZGVyUXVhZCAhPSBw
YWRkaW5nUXVhZCkKLSAgICAgICAgZHJhd091dGxpbmVkUXVhZFdpdGhDbGlwKGNvbnRleHQsIGJv
cmRlclF1YWQsIHBhZGRpbmdRdWFkLCBib3JkZXJCb3hDb2xvcik7Ci0gICAgaWYgKHBhZGRpbmdR
dWFkICE9IGNvbnRlbnRRdWFkKQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkV2l0aENsaXAoY29u
dGV4dCwgcGFkZGluZ1F1YWQsIGNvbnRlbnRRdWFkLCBwYWRkaW5nQm94Q29sb3IpOwotCi0gICAg
ZHJhd091dGxpbmVkUXVhZChjb250ZXh0LCBjb250ZW50UXVhZCwgY29udGVudEJveENvbG9yKTsK
LX0KLQotc3RhdGljIHZvaWQgZHJhd0hpZ2hsaWdodEZvckxpbmVCb3hlc09yU1ZHUmVuZGVyZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYgbGluZUJv
eFF1YWRzKQotewotICAgIHN0YXRpYyBjb25zdCBDb2xvciBsaW5lQm94Q29sb3IoMTI1LCAxNzMs
IDIxNywgMTI4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJveFF1YWRzLnNp
emUoKTsgKytpKQotICAgICAgICBkcmF3T3V0bGluZWRRdWFkKGNvbnRleHQsIGxpbmVCb3hRdWFk
c1tpXSwgbGluZUJveENvbG9yKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvbnZlcnRGcm9t
RnJhbWVUb01haW5GcmFtZShGcmFtZSogZnJhbWUsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmVj
dCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZWN0KSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgSW50U2l6ZSBmcmFtZVRvTWFpbkZyYW1lT2Zmc2V0KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBJ
bnRQb2ludCBtYWluRnJhbWVQb2ludCA9IGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPndpbmRvd1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhJbnRQ
b2ludCgpKSk7Ci0gICAgcmV0dXJuIG1haW5GcmFtZVBvaW50IC0gSW50UG9pbnQoKTsKLX0KLQot
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hpZ2hsaWdodGVkTm9kZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1faGlnaGxpZ2h0ZWRO
b2RlLT5yZW5kZXJlcigpOwotICAgIEZyYW1lKiBjb250YWluaW5nRnJhbWUgPSBtX2hpZ2hsaWdo
dGVkTm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFjb250
YWluaW5nRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFNpemUgbWFpbkZyYW1lT2Zm
c2V0ID0gZnJhbWVUb01haW5GcmFtZU9mZnNldChjb250YWluaW5nRnJhbWUpOwotICAgIEludFJl
Y3QgYm91bmRpbmdCb3ggPSByZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7
Ci0gICAgYm91bmRpbmdCb3gubW92ZShtYWluRnJhbWVPZmZzZXQpOwotCi0gICAgSW50UmVjdCB0
aXRsZVJlZmVyZW5jZUJveCA9IGJvdW5kaW5nQm94OwotCi0gICAgQVNTRVJUKG1faW5zcGVjdGVk
UGFnZSk7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFt
ZSgpLT52aWV3KCk7Ci0gICAgRmxvYXRSZWN0IG92ZXJsYXlSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KCk7Ci0gICAgaWYgKCFvdmVybGF5UmVjdC5jb250YWlucyhib3VuZGluZ0JveCkg
JiYgIWJvdW5kaW5nQm94LmNvbnRhaW5zKGVuY2xvc2luZ0ludFJlY3Qob3ZlcmxheVJlY3QpKSkK
LSAgICAgICAgb3ZlcmxheVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtb3ZlcmxheVJlY3QueCgpLCAtb3ZlcmxheVJlY3QueSgpKTsKLQot
ICAgIC8vIFJlbmRlclNWR1Jvb3Qgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIHRocm91Z2ggdGhlIGlz
Qm94KCkgY29kZSBwYXRoLCBhbGwgb3RoZXIgU1ZHIGVsZW1lbnRzIHNob3VsZCBqdXN0IGR1bXAg
dGhlaXIgYWJzb2x1dGVRdWFkcygpLgotI2lmIEVOQUJMRShTVkcpCi0gICAgYm9vbCBpc1NWR1Jl
bmRlcmVyID0gcmVuZGVyZXItPm5vZGUoKSAmJiByZW5kZXJlci0+bm9kZSgpLT5pc1NWR0VsZW1l
bnQoKSAmJiAhcmVuZGVyZXItPmlzU1ZHUm9vdCgpOwotI2Vsc2UKLSAgICBib29sIGlzU1ZHUmVu
ZGVyZXIgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKHJlbmRlcmVyLT5pc0JveCgpICYmICFp
c1NWR1JlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gdG9SZW5kZXJC
b3gocmVuZGVyZXIpOwotCi0gICAgICAgIEludFJlY3QgY29udGVudEJveCA9IHJlbmRlckJveC0+
Y29udGVudEJveFJlY3QoKTsKLQotICAgICAgICBJbnRSZWN0IHBhZGRpbmdCb3goY29udGVudEJv
eC54KCkgLSByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCksIGNvbnRlbnRCb3gueSgpIC0gcmVuZGVy
Qm94LT5wYWRkaW5nVG9wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Qm94
LndpZHRoKCkgKyByZW5kZXJCb3gtPnBhZGRpbmdMZWZ0KCkgKyByZW5kZXJCb3gtPnBhZGRpbmdS
aWdodCgpLCBjb250ZW50Qm94LmhlaWdodCgpICsgcmVuZGVyQm94LT5wYWRkaW5nVG9wKCkgKyBy
ZW5kZXJCb3gtPnBhZGRpbmdCb3R0b20oKSk7Ci0gICAgICAgIEludFJlY3QgYm9yZGVyQm94KHBh
ZGRpbmdCb3gueCgpIC0gcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCksIHBhZGRpbmdCb3gueSgpIC0g
cmVuZGVyQm94LT5ib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGlu
Z0JveC53aWR0aCgpICsgcmVuZGVyQm94LT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJCb3gtPmJvcmRl
clJpZ2h0KCksIHBhZGRpbmdCb3guaGVpZ2h0KCkgKyByZW5kZXJCb3gtPmJvcmRlclRvcCgpICsg
cmVuZGVyQm94LT5ib3JkZXJCb3R0b20oKSk7Ci0gICAgICAgIEludFJlY3QgbWFyZ2luQm94KGJv
cmRlckJveC54KCkgLSByZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSwgYm9yZGVyQm94LnkoKSAtIHJl
bmRlckJveC0+bWFyZ2luVG9wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJv
eC53aWR0aCgpICsgcmVuZGVyQm94LT5tYXJnaW5MZWZ0KCkgKyByZW5kZXJCb3gtPm1hcmdpblJp
Z2h0KCksIGJvcmRlckJveC5oZWlnaHQoKSArIHJlbmRlckJveC0+bWFyZ2luVG9wKCkgKyByZW5k
ZXJCb3gtPm1hcmdpbkJvdHRvbSgpKTsKLQotICAgICAgICB0aXRsZVJlZmVyZW5jZUJveCA9IG1h
cmdpbkJveDsKLSAgICAgICAgdGl0bGVSZWZlcmVuY2VCb3gubW92ZShtYWluRnJhbWVPZmZzZXQp
OwotICAgICAgICB0aXRsZVJlZmVyZW5jZUJveC5tb3ZlKGJvdW5kaW5nQm94LngoKSwgYm91bmRp
bmdCb3gueSgpKTsKLQotICAgICAgICBGbG9hdFF1YWQgYWJzQ29udGVudFF1YWQgPSByZW5kZXJC
b3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGNvbnRlbnRCb3gpKTsKLSAgICAgICAg
RmxvYXRRdWFkIGFic1BhZGRpbmdRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChwYWRkaW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UXVhZCBhYnNCb3JkZXJRdWFk
ID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3JkZXJCb3gpKTsK
LSAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJCb3gtPmxvY2FsVG9BYnNv
bHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwotCi0gICAgICAgIGFic0NvbnRlbnRRdWFk
Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJzUGFkZGluZ1F1YWQubW92ZShtYWlu
RnJhbWVPZmZzZXQpOwotICAgICAgICBhYnNCb3JkZXJRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0
KTsKLSAgICAgICAgYWJzTWFyZ2luUXVhZC5tb3ZlKG1haW5GcmFtZU9mZnNldCk7Ci0KLSAgICAg
ICAgZHJhd0hpZ2hsaWdodEZvckJveChjb250ZXh0LCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGlu
Z1F1YWQsIGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQpOwotICAgIH0gZWxzZSBpZiAocmVu
ZGVyZXItPmlzUmVuZGVySW5saW5lKCkgfHwgaXNTVkdSZW5kZXJlcikgewotICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHNob3cgbWFyZ2lucy9wYWRkaW5nL2JvcmRlciBmb3IgaW5saW5lcy4K
LSAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gbGluZUJveFF1YWRzOwotICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVRdWFkcyhsaW5lQm94UXVhZHMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGluZUJveFF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGluZUJveFF1
YWRzW2ldICs9IG1haW5GcmFtZU9mZnNldDsKLQotICAgICAgICBkcmF3SGlnaGxpZ2h0Rm9yTGlu
ZUJveGVzT3JTVkdSZW5kZXJlcihjb250ZXh0LCBsaW5lQm94UXVhZHMpOwotICAgIH0KLQotICAg
IC8vIERyYXcgbm9kZSB0aXRsZSBpZiBuZWNlc3NhcnkuCi0KLSAgICBpZiAoIW1faGlnaGxpZ2h0
ZWROb2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkNvcmU6
OlNldHRpbmdzKiBzZXR0aW5ncyA9IGNvbnRhaW5pbmdGcmFtZS0+c2V0dGluZ3MoKTsKLSAgICBk
cmF3RWxlbWVudFRpdGxlKGNvbnRleHQsIHRpdGxlUmVmZXJlbmNlQm94LCBvdmVybGF5UmVjdCwg
c2V0dGluZ3MpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdFbGVtZW50VGl0
bGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwg
Y29uc3QgRmxvYXRSZWN0JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqIHNldHRpbmdz
KSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBpbnQgcmVjdEluZmxhdGVQeCA9IDQ7Ci0gICAg
c3RhdGljIGNvbnN0IGludCBmb250SGVpZ2h0UHggPSAxMjsKLSAgICBzdGF0aWMgY29uc3QgaW50
IGJvcmRlcldpZHRoUHggPSAxOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciB0b29sdGlwQmFja2dy
b3VuZENvbG9yKDI1NSwgMjU1LCAxOTQsIDI1NSk7Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHRv
b2x0aXBCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOwotICAgIHN0YXRpYyBjb25zdCBDb2xvciB0
b29sdGlwRm9udENvbG9yKENvbG9yOjpibGFjayk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1faGlnaGxpZ2h0ZWROb2RlLmdldCgpKTsKLSAgICBib29s
IGlzWEhUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5pc1hIVE1MRG9jdW1lbnQoKTsKLSAgICBT
dHJpbmcgbm9kZVRpdGxlID0gaXNYSFRNTCA/IGVsZW1lbnQtPm5vZGVOYW1lKCkgOiBlbGVtZW50
LT5ub2RlTmFtZSgpLmxvd2VyKCk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZFZhbHVlID0g
ZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkgJiYg
IWlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG5vZGVUaXRsZSArPSAiIyI7Ci0gICAgICAg
IG5vZGVUaXRsZSArPSBpZFZhbHVlOwotICAgIH0KLSAgICBpZiAoZWxlbWVudC0+aGFzQ2xhc3Mo
KSAmJiBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNw
bGl0U3RyaW5nJiBjbGFzc05hbWVzU3RyaW5nID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KGVsZW1lbnQpLT5jbGFzc05hbWVzKCk7Ci0gICAgICAgIHNpemVfdCBjbGFzc05hbWVDb3VudCA9
IGNsYXNzTmFtZXNTdHJpbmcuc2l6ZSgpOwotICAgICAgICBpZiAoY2xhc3NOYW1lQ291bnQpIHsK
LSAgICAgICAgICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nPiB1c2VkQ2xhc3NOYW1lczsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2xhc3NOYW1lQ291bnQ7ICsraSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lID0gY2xhc3NOYW1lc1N0
cmluZ1tpXTsKLSAgICAgICAgICAgICAgICBpZiAodXNlZENsYXNzTmFtZXMuY29udGFpbnMoY2xh
c3NOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
dXNlZENsYXNzTmFtZXMuYWRkKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICAgICAgbm9kZVRpdGxl
ICs9ICIuIjsKLSAgICAgICAgICAgICAgICBub2RlVGl0bGUgKz0gY2xhc3NOYW1lOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgRWxlbWVudCogaGlnaGxpZ2h0ZWRFbGVt
ZW50ID0gbV9oaWdobGlnaHRlZE5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSkgOiAwOwotICAgIG5vZGVUaXRsZSArPSAi
IFsiOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1lbnQg
PyBoaWdobGlnaHRlZEVsZW1lbnQtPm9mZnNldFdpZHRoKCkgOiBib3VuZGluZ0JveC53aWR0aCgp
KTsKLSAgICBub2RlVGl0bGUuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPigweDAwRDcpKTsgLy8g
JnRpbWVzOwotICAgIG5vZGVUaXRsZSArPSBTdHJpbmc6Om51bWJlcihoaWdobGlnaHRlZEVsZW1l
bnQgPyBoaWdobGlnaHRlZEVsZW1lbnQtPm9mZnNldEhlaWdodCgpIDogYm91bmRpbmdCb3guaGVp
Z2h0KCkpOwotICAgIG5vZGVUaXRsZSArPSAiXSI7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZGVz
YzsKLSAgICBGb250RmFtaWx5IGZhbWlseTsKLSAgICBmYW1pbHkuc2V0RmFtaWx5KHNldHRpbmdz
LT5maXhlZEZvbnRGYW1pbHkoKSk7Ci0gICAgZGVzYy5zZXRGYW1pbHkoZmFtaWx5KTsKLSAgICBk
ZXNjLnNldENvbXB1dGVkU2l6ZShmb250SGVpZ2h0UHgpOwotICAgIEZvbnQgZm9udCA9IEZvbnQo
ZGVzYywgMCwgMCk7Ci0gICAgZm9udC51cGRhdGUoMCk7Ci0KLSAgICBUZXh0UnVuIG5vZGVUaXRs
ZVJ1bihub2RlVGl0bGUpOwotICAgIEludFBvaW50IHRpdGxlQmFzZVBvaW50ID0gYm91bmRpbmdC
b3guYm90dG9tTGVmdCgpOwotICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwg
cmVjdEluZmxhdGVQeCk7Ci0gICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwg
Zm9udEhlaWdodFB4KSk7Ci0gICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7Ci0K
LSAgICAvLyBUaGUgaW5pdGlhbCBvZmZzZXRzIG5lZWRlZCB0byBjb21wZW5zYXRlIGZvciBhIDFw
eC10aGljayBib3JkZXIgc3Ryb2tlICh3aGljaCBpcyBub3QgYSBwYXJ0IG9mIHRoZSByZWN0YW5n
bGUpLgotICAgIGludCBkeCA9IC1ib3JkZXJXaWR0aFB4OwotICAgIGludCBkeSA9IGJvcmRlcldp
ZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIG92
ZXJsYXlSZWN0LCByaWdodC1hbGlnbiB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0g
ICAgaWYgKHRpdGxlUmVjdC5yaWdodCgpID4gb3ZlcmxheVJlY3QucmlnaHQoKSkKLSAgICAgICAg
ZHggPSBvdmVybGF5UmVjdC5yaWdodCgpIC0gdGl0bGVSZWN0LnJpZ2h0KCk7Ci0KLSAgICAvLyBJ
ZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3QsIGxlZnQtYWxp
Z24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QueCgp
ICsgZHggPCBvdmVybGF5UmVjdC54KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QueCgpIC0g
dGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7Ci0KLSAgICAvLyBJZiB0aGUgdGlwIHN0aWNr
cyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0IHRvcCBv
ZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92ZXJsYXlSZWN0
LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0bGVSZWN0LmJv
dHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKLSAgICAgICAgLy8gSWYgdGhlIHRpcCBzdGlsbCBzdGlj
a3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3QsIGJvdHRvbS1hbGlnbiB0aGUgdGlw
IHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkg
KyBkeSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgpKQotICAgICAgICAgICAgZHkgPSBvdmVybGF5UmVj
dC5ib3R0b20oKSAtIHRpdGxlUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlwIGF0
IHRvcCBvZiBvdmVybGF5UmVjdC4KLSAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgb3Zlcmxh
eVJlY3QueSgpKQotICAgICAgICBkeSA9IG92ZXJsYXlSZWN0LnkoKSAtIHRpdGxlUmVjdC55KCkg
KyBib3JkZXJXaWR0aFB4OwotCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKLSAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKHRvb2x0aXBCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJH
Qik7Ci0gICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYm9yZGVyV2lkdGhQeCk7Ci0gICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IodG9vbHRpcEJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURl
dmljZVJHQik7Ci0gICAgY29udGV4dC5kcmF3UmVjdCh0aXRsZVJlY3QpOwotICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKHRvb2x0aXBGb250Q29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAg
IGNvbnRleHQuZHJhd1RleHQoZm9udCwgbm9kZVRpdGxlUnVuLCBJbnRQb2ludCh0aXRsZVJlY3Qu
eCgpICsgcmVjdEluZmxhdGVQeCwgdGl0bGVSZWN0LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5o
ZWlnaHQoKSkpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6Om9wZW5Jbkluc3BlY3Rl
ZFdpbmRvdyhjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBGcmFtZSogbWFpbkZyYW1lID0gbV9p
bnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKTsKLQotICAgIEZyYW1lTG9hZFJlcXVlc3QgcmVxdWVz
dChtYWluRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFJlc291cmNlUmVxdWVz
dCgpLCAiX2JsYW5rIik7Ci0KLSAgICBib29sIGNyZWF0ZWQ7Ci0gICAgV2luZG93RmVhdHVyZXMg
d2luZG93RmVhdHVyZXM7Ci0gICAgRnJhbWUqIG5ld0ZyYW1lID0gV2ViQ29yZTo6Y3JlYXRlV2lu
ZG93KG1haW5GcmFtZSwgbWFpbkZyYW1lLCByZXF1ZXN0LCB3aW5kb3dGZWF0dXJlcywgY3JlYXRl
ZCk7Ci0gICAgaWYgKCFuZXdGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVXNlckdlc3R1
cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwot
ICAgIG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKG1haW5GcmFtZSk7Ci0gICAgbmV3RnJh
bWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKLSAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNo
YW5nZUxvY2F0aW9uKG1haW5GcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgbmV3
RnJhbWUtPmxvYWRlcigpLT5jb21wbGV0ZVVSTCh1cmwpLCAiIiwgZmFsc2UsIGZhbHNlKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNv
bnN0IFN0cmluZyYgc291cmNlKQotewotICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQuYXBw
ZW5kKHNvdXJjZSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlQWxsU2Ny
aXB0c1RvRXZhbHVhdGVPbkxvYWQoKQotewotICAgIG1fc2NyaXB0c1RvRXZhbHVhdGVPbkxvYWQu
Y2xlYXIoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRJbnNwZWN0b3JFeHRl
bnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpCi17Ci0gICAgbV9pbnNwZWN0b3JFeHRlbnNp
b25BUEkgPSBzb3VyY2U7Ci19Ci0KLUtVUkwgSW5zcGVjdG9yQ29udHJvbGxlcjo6aW5zcGVjdGVk
VVJMKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKS0+
bG9hZGVyKCktPnVybCgpOwotfQotCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlbG9hZFBh
Z2UoKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ugc2V0IHRoZSB1c2VyIGdlc3R1cmUgaW5k
aWNhdG9yIGhlcmU/Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgaW5kaWNhdG9yKERlZmluaXRl
bHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwotICAgIG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1l
KCktPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVSZWZyZXNoKCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBoZWFkZXJzKQorLy8gRklYTUU6IHRlbXBvcmFyeSBzb2x1dGlvbi4gSXQgd2lsbCBi
ZWNvbWUgYSBzZXBhcmF0ZSBjbGFzcyBpbiB0aGUgbmV4dCBwYXRjaCBhbmQgQ29udHJvbGxlciBy
ZWxhdGVkIHN1YnNldCBvZiBmdW5jdGlvbnMgd2lsbCBiZSBtb3ZlZCBmcm9tIEluc3BlY3RvckFn
ZW50IHRvIEluc3BlY3RvckNvbnRyb2xlci4KK0luc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3Rv
ckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDbGllbnQp
CisgICAgOiBJbnNwZWN0b3JBZ2VudCh0aGlzLCBwYWdlLCBpbnNwZWN0b3JDbGllbnQpCiB7Ci0g
ICAgbV9leHRyYUhlYWRlcnMgPSBhZG9wdFB0cihuZXcgSFRUUEhlYWRlck1hcCgpKTsKLSAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMtPmVuZCgpOwotICAg
IGZvciAoSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMtPmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTdHJpbmcgdmFsdWU7Ci0gICAgICAgIGlm
ICghaXQtPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBtX2V4dHJhSGVhZGVycy0+YWRkKGl0LT5maXJzdCwgdmFsdWUpOwotICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggOTBhMDMwMC4uNDJlOTYxNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0xLDM2NSArMSw0
OSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKICAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBJbnNwZWN0
b3JDb250cm9sbGVyX2gKICNkZWZpbmUgSW5zcGVjdG9yQ29udHJvbGxlcl9oCiAKLSNpbmNsdWRl
ICJDaGFyYWN0ZXJEYXRhLmgiCi0jaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkNvb2tp
ZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5j
bHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
YWNoZWRSZXNvdXJjZTsKLWNsYXNzIENoYXJhY3RlckRhdGE7Ci1jbGFzcyBEYXRhYmFzZTsKLWNs
YXNzIERPTVdyYXBwZXJXb3JsZDsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRG9jdW1lbnRMb2Fk
ZXI7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBIVFRQ
SGVhZGVyTWFwOwotY2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNsYXNzIEluamVjdGVkU2NyaXB0Owot
Y2xhc3MgSW5qZWN0ZWRTY3JpcHRIb3N0OwotY2xhc3MgSW5zcGVjdG9yQXJyYXk7Ci1jbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKLWNsYXNzIEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dl
ckFnZW50OwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OwotY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFn
ZW50OwotY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JET01BZ2VudDsK
LWNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDsKLWNsYXNzIEluc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZTsKLWNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlOwotY2xhc3MgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDsKLWNsYXNz
IEluc3BlY3RvckZyb250ZW5kOwotY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7Ci1jbGFz
cyBJbnNwZWN0b3JPYmplY3Q7Ci1jbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50OwotY2xhc3Mg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDsKLWNsYXNzIEluc3BlY3RvclJ1bnRpbWVBZ2VudDsKLWNs
YXNzIEluc3BlY3RvclNldHRpbmdzOwotY2xhc3MgSW5zcGVjdG9yU3RhdGU7Ci1jbGFzcyBJbnNw
ZWN0b3JTdG9yYWdlQWdlbnQ7Ci1jbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50OwotY2xhc3Mg
SW5zcGVjdG9yVmFsdWU7Ci1jbGFzcyBJbnNwZWN0b3JXb3JrZXJSZXNvdXJjZTsKLWNsYXNzIElu
dFJlY3Q7Ci1jbGFzcyBLVVJMOwotY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBSZXNv
dXJjZVJlcXVlc3Q7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotY2xhc3MgUmVzb3VyY2VFcnJv
cjsKLWNsYXNzIFNjcmlwdEFyZ3VtZW50czsKLWNsYXNzIFNjcmlwdENhbGxTdGFjazsKLWNsYXNz
IFNjcmlwdFByb2ZpbGU7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTdG9yYWdlQXJlYTsK
IAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi1jbGFzcyBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkK
LWNsYXNzIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQotY2xhc3MgV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdDsKLWNsYXNzIFdlYlNv
Y2tldEhhbmRzaGFrZVJlc3BvbnNlOwotI2VuZGlmCi0KLWNsYXNzIEluc3BlY3RvckNvbnRyb2xs
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnRyb2xsZXIpOyBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKy8vIEZJWE1FOiB0ZW1wb3Jhcnkgc29sdXRpb24uIEl0IHdp
bGwgYmVjb21lIGEgc2VwYXJhdGUgY2xhc3MgaW4gdGhlIG5leHQgcGF0Y2ggYW5kIGNvbnRyb2xs
ZXIgcmVsYXRlZCBzdWJzZXQgb2YgZnVuY3Rpb25zIHdpbGwgYmUgbW92ZWQgZnJvbSBJbnNwZWN0
b3JBZ2VudCB0byBJbnNwZWN0b3JDb250cm9sZXIuCitjbGFzcyBJbnNwZWN0b3JDb250cm9sbGVy
IDogcHVibGljIEluc3BlY3RvckFnZW50IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgQ29uc29sZVBhbmVsOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBFbGVt
ZW50c1BhbmVsOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBQcm9maWxlc1BhbmVsOwot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBTY3JpcHRzUGFuZWw7Ci0KICAgICBJbnNwZWN0
b3JDb250cm9sbGVyKFBhZ2UqLCBJbnNwZWN0b3JDbGllbnQqKTsKLSAgICB+SW5zcGVjdG9yQ29u
dHJvbGxlcigpOwotCi0gICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5n
ZXQoKTsgfQotICAgIEluc3BlY3RvckNsaWVudCogaW5zcGVjdG9yQ2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KLSAgICBJbmplY3RlZFNjcmlwdEhvc3QqIGluamVjdGVkU2NyaXB0SG9zdCgp
IHsgcmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRIb3N0LmdldCgpOyB9Ci0KLSAgICB2b2lkIGluc3Bl
Y3RlZFBhZ2VEZXN0cm95ZWQoKTsKLQotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwotCi0gICAg
UGFnZSogaW5zcGVjdGVkUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdGVkUGFnZTsgfQot
ICAgIEtVUkwgaW5zcGVjdGVkVVJMKCkgY29uc3Q7Ci0gICAgdm9pZCByZWxvYWRQYWdlKCk7Ci0K
LSAgICB2b2lkIHJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBp
bnNwZWN0b3JDb29raWUpOwotCi0gICAgdm9pZCBpbnNwZWN0KE5vZGUqKTsKLSAgICB2b2lkIGhp
Z2hsaWdodChOb2RlKik7Ci0gICAgdm9pZCBoaWRlSGlnaGxpZ2h0KCk7Ci0gICAgdm9pZCBoaWdo
bGlnaHRET01Ob2RlKGxvbmcgbm9kZUlkKTsKLSAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0
KCkgeyBoaWRlSGlnaGxpZ2h0KCk7IH0KLQotICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUodW5zaWdu
ZWQgbG9uZyBmcmFtZUlkKTsKLSAgICB2b2lkIGhpZGVGcmFtZUhpZ2hsaWdodCgpIHsgaGlkZUhp
Z2hsaWdodCgpOyB9Ci0KLSAgICB2b2lkIHNob3coKTsKLSAgICB2b2lkIHNob3dQYW5lbChjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICB2b2lkIGNvbm5lY3RGcm9udGVu
ZCgpOwotICAgIHZvaWQgcmV1c2VGcm9udGVuZCgpOwotICAgIHZvaWQgZGlzY29ubmVjdEZyb250
ZW5kKCk7Ci0gICAgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9mcm9udGVuZC5nZXQoKTsgfQotCi0gICAgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCogcmVzb3Vy
Y2VBZ2VudCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQWdlbnQoKSB7
IHJldHVybiB0aGlzOyB9Ci0gICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQo
KSB7IHJldHVybiBtX2NvbnNvbGVBZ2VudC5nZXQoKTsgfQotICAgIEluc3BlY3RvckNTU0FnZW50
KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9Ci0gICAgSW5q
ZWN0ZWRTY3JpcHRIb3N0KiBpbmplY3RlZFNjcmlwdEFnZW50KCkgeyByZXR1cm4gbV9pbmplY3Rl
ZFNjcmlwdEhvc3QuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQqIHJ1bnRpbWVB
Z2VudCgpIHsgcmV0dXJuIG1fcnVudGltZUFnZW50LmdldCgpOyB9Ci0gICAgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCgpIHsgcmV0dXJuIG1fdGltZWxpbmVBZ2VudC5nZXQo
KTsgfQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KiBk
YXRhYmFzZUFnZW50KCkgeyByZXR1cm4gbV9kYXRhYmFzZUFnZW50LmdldCgpOyB9Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KiBk
b21TdG9yYWdlQWdlbnQoKSB7IHJldHVybiBtX2RvbVN0b3JhZ2VBZ2VudC5nZXQoKTsgfQotI2Vu
ZGlmCi0jaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQotICAgIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2Vu
dCogZmlsZVN5c3RlbUFnZW50KCkgeyByZXR1cm4gbV9maWxlU3lzdGVtQWdlbnQuZ2V0KCk7IH0K
LSNlbmRpZgotI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIEluc3BlY3RvckJy
b3dzZXJEZWJ1Z2dlckFnZW50KiBicm93c2VyRGVidWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQuZ2V0KCk7IH0KLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KiBkZWJ1Z2dlckFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50LmdldCgp
OyB9Ci0gICAgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCogcHJvZmlsZXJBZ2VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvZmlsZXJBZ2VudC5nZXQoKTsgfQotI2VuZGlmCi0jaWYgRU5BQkxFKE9GRkxJ
TkVfV0VCX0FQUExJQ0FUSU9OUykKLSAgICBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQq
IGFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpIHsgcmV0dXJuIG1fYXBwbGljYXRpb25DYWNoZUFnZW50
LmdldCgpOyB9Ci0jZW5kaWYKLQotCi0gICAgYm9vbCBzZWFyY2hpbmdGb3JOb2RlSW5QYWdlKCkg
Y29uc3Q7Ci0gICAgdm9pZCBtb3VzZURpZE1vdmVPdmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgdW5zaWduZWQgbW9kaWZpZXJGbGFncyk7Ci0gICAgYm9vbCBoYW5kbGVNb3VzZVByZXNz
KCk7Ci0KLSAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7Ci0gICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9u
dGVuZENsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0K
LQotICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lKiwgRE9NV3JhcHBl
cldvcmxkKik7Ci0KLSAgICB2b2lkIGRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqKTsKLQot
ICAgIHZvaWQgc2V0RXh0cmFIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0K
LSAgICB2b2lkIHN0YXJ0VGltZWxpbmVQcm9maWxlcigpOwotICAgIHZvaWQgc3RvcFRpbWVsaW5l
UHJvZmlsZXIoKTsKLQotICAgIHZvaWQgZ2V0Q29va2llcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBjb29raWVzLCBXVEY6OlN0cmluZyogY29va2llc1N0cmluZyk7Ci0gICAgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbik7Ci0K
LSAgICB2b2lkIG1haW5SZXNvdXJjZUZpcmVkTG9hZEV2ZW50KERvY3VtZW50TG9hZGVyKiwgY29u
c3QgS1VSTCYpOwotICAgIHZvaWQgbWFpblJlc291cmNlRmlyZWRET01Db250ZW50RXZlbnQoRG9j
dW1lbnRMb2FkZXIqLCBjb25zdCBLVVJMJik7Ci0KLSNpZiBFTkFCTEUoV09SS0VSUykKLSAgICBl
bnVtIFdvcmtlckFjdGlvbiB7IFdvcmtlckNyZWF0ZWQsIFdvcmtlckRlc3Ryb3llZCB9OwotCi0g
ICAgdm9pZCBwb3N0V29ya2VyTm90aWZpY2F0aW9uVG9Gcm9udGVuZChjb25zdCBJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZSYsIFdvcmtlckFjdGlvbik7Ci0gICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIo
aW50cHRyX3QsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkV29ya2VyKTsKLSAgICB2
b2lkIGRpZERlc3Ryb3lXb3JrZXIoaW50cHRyX3QpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREFU
QUJBU0UpCi0gICAgdm9pZCBkaWRPcGVuRGF0YWJhc2UoUGFzc1JlZlB0cjxEYXRhYmFzZT4sIGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICB2b2lkIGRpZFVz
ZURPTVN0b3JhZ2UoU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYWxTdG9yYWdl
LCBGcmFtZSogZnJhbWUpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCi0gICAg
dm9pZCBkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBL
VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7Ci0gICAgdm9pZCB3aWxs
U2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBj
b25zdCBXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCBkaWRSZWNlaXZlV2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSYpOwotICAgIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXQo
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSNlbmRpZgotCi0gICAgYm9vbCBoYXNGcm9udGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbnRlbmQ7IH0KLQotICAgIHZvaWQgZHJhd05vZGVIaWdo
bGlnaHQoR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0gICAgdm9pZCBvcGVuSW5JbnNwZWN0ZWRX
aW5kb3coY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRUaXRsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBib3VuZGluZ0JveCwgY29uc3QgRmxvYXRSZWN0
JiBvdmVybGF5UmVjdCwgV2ViQ29yZTo6U2V0dGluZ3MqKSBjb25zdDsKLQotI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIGJvb2wgaXNSZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJv
ZmlsZSgpIGNvbnN0OwotICAgIHZvaWQgc3RhcnRQcm9maWxpbmcoKSB7IHN0YXJ0VXNlckluaXRp
YXRlZFByb2ZpbGluZygpOyB9Ci0gICAgdm9pZCBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmco
KTsKLSAgICB2b2lkIHN0b3BQcm9maWxpbmcoKSB7IHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5n
KCk7IH0KLSAgICB2b2lkIHN0b3BVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7Ci0gICAgdm9pZCBl
bmFibGVQcm9maWxlcihib29sIGFsd2F5cyA9IGZhbHNlLCBib29sIHNraXBSZWNvbXBpbGUgPSBm
YWxzZSk7Ci0gICAgdm9pZCBkaXNhYmxlUHJvZmlsZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7Ci0g
ICAgYm9vbCBwcm9maWxlckVuYWJsZWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2hvd0FuZEVuYWJs
ZURlYnVnZ2VyKCk7Ci0gICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIGFsd2F5cyk7Ci0gICAg
dm9pZCBkaXNhYmxlRGVidWdnZXIoYm9vbCBhbHdheXMgPSBmYWxzZSk7Ci0gICAgYm9vbCBkZWJ1
Z2dlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnZ2VyQWdlbnQ7IH0KLSAgICB2b2lk
IHJlc3VtZSgpOwotCi0gICAgdm9pZCBzZXRBbGxCcm93c2VyQnJlYWtwb2ludHMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KTsKLSNlbmRpZgotCi0gICAgLy8gR2VuZXJpYyBjb2RlIGNhbGxl
ZCBmcm9tIGN1c3RvbSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKGxvbmcgdGVzdENhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpcHQpOwotCi0gICAg
dm9pZCBhZGRTY3JpcHRUb0V2YWx1YXRlT25Mb2FkKGNvbnN0IFN0cmluZyYgc291cmNlKTsKLSAg
ICB2b2lkIHJlbW92ZUFsbFNjcmlwdHNUb0V2YWx1YXRlT25Mb2FkKCk7Ci0gICAgdm9pZCBzZXRJ
bnNwZWN0b3JFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwotCi0gICAgYm9vbCBp
bnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpOwotICAgIHZvaWQgc2V0SW5zcGVjdG9yU3RhcnRzQXR0
YWNoZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJbnNwZWN0b3JBdHRhY2hlZEhlaWdodChsb25nIGhl
aWdodCk7Ci0gICAgbG9uZyBpbnNwZWN0b3JBdHRhY2hlZEhlaWdodCgpIGNvbnN0OwotCi0gICAg
SW5zcGVjdG9yU3RhdGUqIHN0YXRlKCkgeyByZXR1cm4gbV9zdGF0ZS5nZXQoKTsgfQotICAgIElu
c3BlY3RvclNldHRpbmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0K
LQotICAgIC8vIEluc3BlY3RvckFnZW50IEFQSQotICAgIHZvaWQgZ2V0SW5zcGVjdG9yU3RhdGUo
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0YXRlKTsKLSAgICB2b2lkIHNldE1vbml0b3JpbmdY
SFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwotICAgIHZvaWQgcG9wdWxh
dGVTY3JpcHRPYmplY3RzKCk7Ci0gICAgLy8gRm9sbG93aW5nIGFyZSB1c2VkIGZyb20gSW5zcGVj
dG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KLSAgICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUo
Ym9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIGpzb25SZXN1bHQpOwotCi0g
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uIEFQSQotICAgIHZvaWQgZW5zdXJlU2V0dGlu
Z3NMb2FkZWQoKTsKLSAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmKTsK
LQotcHJpdmF0ZToKLSAgICB2b2lkIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgpOwotICAgIHZv
aWQgcmVzdG9yZURlYnVnZ2VyKCk7Ci0gICAgZW51bSBQcm9maWxlclJlc3RvcmVBY3Rpb24gewot
ICAgICAgICBQcm9maWxlclJlc3RvcmVOb0FjdGlvbiA9IDAsCi0gICAgICAgIFByb2ZpbGVyUmVz
dG9yZVJlc2V0QWdlbnQgPSAxCi0gICAgfTsKLSAgICB2b2lkIHJlc3RvcmVQcm9maWxlcihQcm9m
aWxlclJlc3RvcmVBY3Rpb24gYWN0aW9uKTsKLSAgICB2b2lkIHVuYmluZEFsbFJlc291cmNlcygp
OwotICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpOwotCi0gICAgdm9p
ZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJ
UFRfREVCVUdHRVIpCi0gICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCk7Ci0jZW5kaWYK
LQotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckNvb2tpZShj
b25zdCBDb29raWUmKTsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+Jik7Ci0KLSAgICB2b2lkIGZvY3VzTm9kZSgp
OwotICAgIGJvb2wgaXNNYWluUmVzb3VyY2VMb2FkZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwg
Y29uc3QgS1VSTCYgcmVxdWVzdFVybCk7Ci0KLSAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7Ci0g
ICAgSW5zcGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7Ci0gICAgYm9vbCBtX29wZW5pbmdG
cm9udGVuZDsKLSAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7Ci0gICAg
T3duUHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50OwotICAgIFJlZlB0cjxJbnNwZWN0
b3JET01BZ2VudD4gbV9kb21BZ2VudDsKLQotI2lmIEVOQUJMRShEQVRBQkFTRSkKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VBZ2VudD4gbV9kYXRhYmFzZUFnZW50OwotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgUmVmUHRyPEluc3BlY3RvckRPTVN0b3JhZ2VBZ2Vu
dD4gbV9kb21TdG9yYWdlQWdlbnQ7Ci0jZW5kaWYKLQotICAgIE93blB0cjxJbnNwZWN0b3JUaW1l
bGluZUFnZW50PiBtX3RpbWVsaW5lQWdlbnQ7Ci0gICAgT3duUHRyPEluc3BlY3RvclN0YXRlPiBt
X3N0YXRlOwotICAgIE93blB0cjxJbnNwZWN0b3JTZXR0aW5ncz4gbV9zZXR0aW5nczsKLQotI2lm
IEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCi0gICAgT3duUHRyPEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudD4gbV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQ7Ci0jZW5kaWYKLSAg
ICAKLSNpZiBFTkFCTEUoRklMRV9TWVNURU0pCi0gICAgUmVmUHRyPEluc3BlY3RvckZpbGVTeXN0
ZW1BZ2VudD4gbV9maWxlU3lzdGVtQWdlbnQ7Ci0jZW5kaWYgCi0KLSAgICBSZWZQdHI8Tm9kZT4g
bV9ub2RlVG9Gb2N1czsKLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2VBZ2VudD4gbV9yZXNv
dXJjZUFnZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JSdW50aW1lQWdlbnQ+IG1fcnVudGltZUFn
ZW50OwotCi0jaWYgRU5BQkxFKERBVEFCQVNFKQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJl
ZlB0cjxJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlPiA+IERhdGFiYXNlUmVzb3VyY2VzTWFwOwot
ICAgIERhdGFiYXNlUmVzb3VyY2VzTWFwIG1fZGF0YWJhc2VSZXNvdXJjZXM7Ci0jZW5kaWYKLSNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gPiBET01TdG9yYWdlUmVzb3VyY2VzTWFwOwotICAg
IERPTVN0b3JhZ2VSZXNvdXJjZXNNYXAgbV9kb21TdG9yYWdlUmVzb3VyY2VzOwotI2VuZGlmCi0K
LSAgICBTdHJpbmcgbV9zaG93QWZ0ZXJWaXNpYmxlOwotICAgIFJlZlB0cjxOb2RlPiBtX2hpZ2hs
aWdodGVkTm9kZTsKLSAgICBPd25QdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IG1faW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI7Ci0gICAgUmVmUHRyPEluamVjdGVkU2NyaXB0SG9zdD4g
bV9pbmplY3RlZFNjcmlwdEhvc3Q7Ci0gICAgT3duUHRyPEluc3BlY3RvckNvbnNvbGVBZ2VudD4g
bV9jb25zb2xlQWdlbnQ7Ci0KLSAgICBWZWN0b3I8cGFpcjxsb25nLCBTdHJpbmc+ID4gbV9wZW5k
aW5nRXZhbHVhdGVUZXN0Q29tbWFuZHM7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zY3JpcHRzVG9F
dmFsdWF0ZU9uTG9hZDsKLSAgICBTdHJpbmcgbV9pbnNwZWN0b3JFeHRlbnNpb25BUEk7Ci0jaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0gICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hl
blNob3duOwotICAgIE93blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdl
bnQ7Ci0gICAgT3duUHRyPEluc3BlY3RvckJyb3dzZXJEZWJ1Z2dlckFnZW50PiBtX2Jyb3dzZXJE
ZWJ1Z2dlckFnZW50OwotICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBtX3Byb2Zp
bGVyQWdlbnQ7Ci0jZW5kaWYKLSAgICBPd25QdHI8SFRUUEhlYWRlck1hcD4gbV9leHRyYUhlYWRl
cnM7Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0gICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90LCBS
ZWZQdHI8SW5zcGVjdG9yV29ya2VyUmVzb3VyY2U+ID4gV29ya2Vyc01hcDsKLQotICAgIFdvcmtl
cnNNYXAgbV93b3JrZXJzOwotI2VuZGlmCiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9
CiAKICNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JDb250cm9sbGVyX2gpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXgg
MzZiY2FiOC4uMzg1NDAwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAi
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYWNmYmI2ZS4uMmZm
YWE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcApAQCAtNDAsMTggKzQwLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5z
cGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorUGFzc093blB0cjxJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUoSW5zcGVjdG9yQWdlbnQqIGluc3Bl
Y3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiB7Ci0gICAgT3duUHRyPElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQoaW5zcGVjdG9yQ29udHJvbGxlciwgZnJvbnRlbmQpKTsKKyAgICBPd25QdHI8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudD4gYWdlbnQgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChpbnNwZWN0b3JBZ2VudCwgZnJvbnRlbmQpKTsKICAgICBTY3JpcHREZWJ1Z1NlcnZl
cjo6c2hhcmVkKCkuY2xlYXJCcmVha3BvaW50cygpOwogICAgIC8vIEZJWE1FKFdLNDQ1MTMpOiBi
cmVha3BvaW50cyBhY3RpdmF0ZWQgZmxhZyBzaG91bGQgYmUgc3luY2hyb25pemVkIGJldHdlZW4g
YWxsIGZyb250LWVuZHMKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtw
b2ludHNBY3RpdmF0ZWQodHJ1ZSk7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLmFk
ZExpc3RlbmVyKGFnZW50LmdldCgpLCBpbnNwZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdl
KCkpOworICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5hZGRMaXN0ZW5lcihhZ2VudC5n
ZXQoKSwgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKSk7CiAgICAgcmV0dXJuIGFnZW50
LnJlbGVhc2UoKTsKIH0KIAotSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0
b3JGcm9udGVuZCogZnJvbnRlbmQpCi0gICAgOiBtX2luc3BlY3RvckNvbnRyb2xsZXIoaW5zcGVj
dG9yQ29udHJvbGxlcikKK0luc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQoSW5zcGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpCisgICAgOiBtX2luc3BlY3RvckFnZW50KGluc3BlY3RvckFnZW50KQogICAgICwg
bV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAs
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQpAQCAtNjAsNyArNjAsNyBAQCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRy
b2xsZXIqIGluc3BlY3RvckNvbgogCiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp+SW5zcGVjdG9y
RGVidWdnZXJBZ2VudCgpCiB7Ci0gICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92
ZUxpc3RlbmVyKHRoaXMsIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpKTsK
KyAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlTGlzdGVuZXIodGhpcywgbV9p
bnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZSgpKTsKICAgICBtX3BhdXNlZFNjcmlwdFN0YXRl
ID0gMDsKIH0KIApAQCAtMTc1LDE0ICsxNzUsMTQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9uc1N0YXRlKGxvbmcgcGF1c2VTdGF0ZSwgbG9uZyogbmUK
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
ZXN1bHQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKGNhbGxGcmFtZUlkLmdldCgpKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3RlZFNjcmlw
dEZvck9iamVjdElkKGNhbGxGcmFtZUlkLmdldCgpKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFt
ZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIHJlc3VsdCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0Q29tcGxldGlvbnNPbkNhbGxGcmFtZShQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgYm9vbCBpbmNsdWRlSW5zcGVjdG9yQ29tbWFuZExpbmVBUEksIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCkKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9
IG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2Ny
aXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQuZ2V0KCkpOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbnNwZWN0b3JBZ2VudC0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQuZ2V0KCkpOwogICAgIGlmICghaW5q
ZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRDb21w
bGV0aW9uc09uQ2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBpbmNsdWRlSW5zcGVj
dG9yQ29tbWFuZExpbmVBUEksIHJlc3VsdCk7CiB9CkBAIC0xOTgsNyArMTk4LDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3VycmVudENhbGxG
cmFtZXMoKQogewogICAgIGlmICghbV9wYXVzZWRTY3JpcHRTdGF0ZSkKICAgICAgICAgcmV0dXJu
IEluc3BlY3RvclZhbHVlOjpudWxsKCk7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmplY3Rl
ZFNjcmlwdEZvcihtX3BhdXNlZFNjcmlwdFN0YXRlKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5zcGVjdG9yQWdlbnQtPmluamVjdGVkU2NyaXB0SG9zdCgpLT5pbmpl
Y3RlZFNjcmlwdEZvcihtX3BhdXNlZFNjcmlwdFN0YXRlKTsKICAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDRjYjlmOWMuLmMxNmIzOGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuaApAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbmpl
Y3RlZFNjcmlwdEhvc3Q7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVj
dG9yQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3Rvck9iamVj
dDsKIGNsYXNzIEluc3BlY3RvclZhbHVlOwpAQCAtNTYsNyArNTYsNyBAQCBlbnVtIERlYnVnZ2Vy
RXZlbnRUeXBlIHsKIGNsYXNzIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgU2NyaXB0
RGVidWdMaXN0ZW5lciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDb250cm9s
bGVyKiwgSW5zcGVjdG9yRnJvbnRlbmQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQWdlbnQqLCBJbnNwZWN0b3JGcm9udGVu
ZCopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKTsKIAogICAgIHN0YXRp
YyBib29sIGlzRGVidWdnZXJBbHdheXNFbmFibGVkKCk7CkBAIC04NCw3ICs4NCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyRm9yUGFnZU5hdmlnYXRpb24oKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckNvbnRyb2xsZXIqLCBJbnNwZWN0b3JGcm9u
dGVuZCopOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yQWdlbnQqLCBJbnNw
ZWN0b3JGcm9udGVuZCopOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY3VycmVu
dENhbGxGcmFtZXMoKTsKIApAQCAtOTUsNyArOTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBy
ZXN0b3JlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkKTsKIAotICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JBZ2Vu
dCogbV9pbnNwZWN0b3JBZ2VudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsK
ICAgICBTY3JpcHRTdGF0ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKICAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBtX3NjcmlwdElEVG9Db250ZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmNwcAppbmRleCAyYTBkZjNjLi40
NjdjOTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmls
ZVN5c3RlbUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RmlsZVN5c3RlbUFnZW50LmNwcApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIkZpbGVTeXN0
ZW1DYWxsYmFja3MuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgotI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JB
Z2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiTG9jYWxG
aWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTY5LDcgKzY5LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBTdHJpbmcmLCBQ
YXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSkKICAgICB7Ci0gICAgICAgIC8v
IEFnZW50IHdpbGwgYmUgYWxpdmUgZXZlbiBpZiBJbnNwZWN0b3JDb250cm9sbGVyIGlzIGRlc3Ry
b3llZCB1bnRpbCBjYWxsYmFjayBpcyBydW4uCisgICAgICAgIC8vIEFnZW50IHdpbGwgYmUgYWxp
dmUgZXZlbiBpZiBJbnNwZWN0b3JBZ2VudCBpcyBkZXN0cm95ZWQgdW50aWwgY2FsbGJhY2sgaXMg
cnVuLgogICAgICAgICBtX2FnZW50LT5kaWRHZXRGaWxlU3lzdGVtUGF0aChmaWxlU3lzdGVtLT5y
b290KCksIG1fdHlwZSwgbV9vcmlnaW4pOwogICAgIH0KIApAQCAtMTA1LDggKzEwNSw4IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fb3JpZ2luOwogfTsKIAotSW5zcGVjdG9yRmlsZVN5c3RlbUFn
ZW50OjpJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQotICAgIDogbV9pbnNw
ZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCitJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQ6Okluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKKyAgICA6IG1faW5zcGVjdG9yQWdl
bnQoaW5zcGVjdG9yQWdlbnQpCiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogewogfQpAQCAt
MTE1LDcgKzExNSw3IEBAIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6fkluc3BlY3RvckZpbGVT
eXN0ZW1BZ2VudCgpIHsgfQogCiB2b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6c3RvcCgp
CiB7Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyID0gMDsKKyAgICBtX2luc3BlY3RvckFnZW50
ID0gMDsKIH0KIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpAQCAtMTM5LDcgKzEzOSw3IEBAIHZv
aWQgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50OjpnZXRGaWxlU3lzdGVtUGF0aEFzeW5jKHVuc2ln
bmVkIGludCB0eXBlLCBjb25zdCBTCiAgICAgfQogCiAgICAgQXN5bmNGaWxlU3lzdGVtOjpUeXBl
IGFzeW5jRmlsZVN5c3RlbVR5cGUgPSBzdGF0aWNfY2FzdDxBc3luY0ZpbGVTeXN0ZW06OlR5cGU+
KHR5cGUpOwotICAgIEZyYW1lKiBtYWluRnJhbWUgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmlu
c3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCk7CisgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1faW5z
cGVjdG9yQWdlbnQtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCk7CiAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtYWluRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVu
dCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PnRvU3RyaW5nKCkgPT0gb3JpZ2luKSB7CkBAIC0xNTEsOCArMTUxLDggQEAgdm9pZCBJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQ6OmdldEZpbGVTeXN0ZW1QYXRoQXN5bmModW5zaWduZWQgaW50IHR5
cGUsIGNvbnN0IFMKIAogdm9pZCBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQ6OmRpZEdldEZpbGVT
eXN0ZW1QYXRoKGNvbnN0IFN0cmluZyYgcm9vdCwgQXN5bmNGaWxlU3lzdGVtOjpUeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgb3JpZ2luKQogewotICAgIC8vIFdoZW4gY29udHJvbGxlciBpcyBiZWlu
ZyBkZXN0cm95ZWQsIHRoaXMgaXMgc2V0IHRvIDAuIEFnZW50IGNhbiBsaXZlIGV2ZW4gYWZ0ZXIg
bV9pbnNwZWN0b3JDb250cm9sbGVyIGlzIGRlc3Ryb3llZC4KLSAgICBpZiAoIW1faW5zcGVjdG9y
Q29udHJvbGxlcikKKyAgICAvLyBXaGVuIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGVzdHJveWVkLCB0
aGlzIGlzIHNldCB0byAwLiBBZ2VudCBjYW4gbGl2ZSBldmVuIGFmdGVyIG1faW5zcGVjdG9yQWdl
bnQgaXMgZGVzdHJveWVkLgorICAgIGlmICghbV9pbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgbV9mcm9udGVuZC0+ZGlkR2V0RmlsZVN5c3RlbVBhdGgocm9vdCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pih0eXBlKSwgb3JpZ2luKTsKQEAgLTE2MCw4ICsxNjAsOCBAQCB2
b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6ZGlkR2V0RmlsZVN5c3RlbVBhdGgoY29uc3Qg
U3RyaW5nJiByb290LCBBc3luY0ZpbAogCiB2b2lkIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudDo6
ZGlkR2V0RmlsZVN5c3RlbUVycm9yKEFzeW5jRmlsZVN5c3RlbTo6VHlwZSB0eXBlLCBjb25zdCBT
dHJpbmcmIG9yaWdpbikKIHsKLSAgICAvLyBXaGVuIGNvbnRyb2xsZXIgaXMgYmVpbmcgZGVzdHJv
eWVkLCB0aGlzIGlzIHNldCB0byAwLiBBZ2VudCBjYW4gbGl2ZSBldmVuIGFmdGVyIG1faW5zcGVj
dG9yQ29udHJvbGxlciBpcyBkZXN0cm95ZWQuCi0gICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgLy8gV2hlbiBjb250cm9sbGVyIGlzIGJlaW5nIGRlc3Ryb3llZCwgdGhpcyBpcyBz
ZXQgdG8gMC4gQWdlbnQgY2FuIGxpdmUgZXZlbiBhZnRlciBtX2luc3BlY3RvckFnZW50IGlzIGRl
c3Ryb3llZC4KKyAgICBpZiAoIW1faW5zcGVjdG9yQWdlbnQpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX2Zyb250ZW5kLT5kaWRHZXRGaWxlU3lzdGVtRXJyb3Ioc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pih0eXBlKSwgb3JpZ2luKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaAppbmRleCBhODVhZDBmLi5iOTk1ZDcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZpbGVTeXN0ZW1BZ2Vu
dC5oCkBAIC00MCwxNSArNDAsMTUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9j
dW1lbnQ7Ci1jbGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7
CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIExvY2FsRmlsZVN5c3RlbTsKIAogY2xh
c3MgSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9y
RmlsZVN5c3RlbUFnZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yRmlsZVN5c3RlbUFnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9y
Q29udHJvbGxlciwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiBp
bnNwZWN0b3JBZ2VudCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoaW5zcGVjdG9y
Q29udHJvbGxlciwgZnJvbnRlbmQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JGaWxlU3lzdGVtQWdlbnQoaW5zcGVjdG9yQWdlbnQsIGZyb250ZW5kKSk7CiAgICAgfQog
CiAgICAgfkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCgpOwpAQCAtNjQsMTAgKzY0LDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZEdldEZpbGVTeXN0ZW1EaXNhYmxlZCgpOwogCiBwcml2YXRlOgot
ICAgIEluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiwgSW5zcGVj
dG9yRnJvbnRlbmQqKTsKKyAgICBJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQoSW5zcGVjdG9yQWdl
bnQqLCBJbnNwZWN0b3JGcm9udGVuZCopOwogICAgIHZvaWQgZ2V0RmlsZVN5c3RlbVJvb3QoQXN5
bmNGaWxlU3lzdGVtOjpUeXBlKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVj
dG9yQ29udHJvbGxlcjsKKyAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JBZ2VudDsKICAg
ICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5kZXggMzQyYWYwZi4u
MTc5NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKQEAgLTIwMCw3ICsyMDEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5k
SG9zdDo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0CiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpzZXRFeHRlbnNpb25BUEkoY29uc3QgU3RyaW5nJiBzY3JpcHQpCiB7
Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yID0gbV9mcm9udGVuZFBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9yID0gbV9m
cm9udGVuZFBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKICAgICBpbnNwZWN0b3ItPnNldElu
c3BlY3RvckV4dGVuc2lvbkFQSShzY3JpcHQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggOGM0ZjI4Zi4uZTcx
OThiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9m
aWxlckFnZW50LmNwcApAQCAtMzMsOCArMzMsOCBAQAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29uc29sZUFnZW50
LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgpAQCAtNTYsMTQgKzU2LDE0IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5p
dGlhdGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluCiBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBIZWFwUHJvZmlsZVR5cGUgPSAiSEVBUCI7CiAKLVBhc3NPd25QdHI8SW5zcGVj
dG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpCitQYXNzT3duUHRyPEluc3BlY3RvclBy
b2ZpbGVyQWdlbnQ+IEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShJbnNwZWN0b3JBZ2Vu
dCogaW5zcGVjdG9yQWdlbnQpCiB7Ci0gICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+
IGFnZW50ID0gYWRvcHRQdHIobmV3IEluc3BlY3RvclByb2ZpbGVyQWdlbnQoaW5zcGVjdG9yQ29u
dHJvbGxlcikpOworICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBhZ2VudCA9IGFk
b3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3BlY3RvckFnZW50KSk7CiAgICAg
cmV0dXJuIGFnZW50LnJlbGVhc2UoKTsKIH0KIAotSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5z
cGVjdG9yUHJvZmlsZXJBZ2VudChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9s
bGVyKQotICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCitJ
bnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckFn
ZW50KiBpbnNwZWN0b3JBZ2VudCkKKyAgICA6IG1faW5zcGVjdG9yQWdlbnQoaW5zcGVjdG9yQWdl
bnQpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2VuYWJsZWQoU2NyaXB0UHJvZmlsZXI6
OmlzUHJvZmlsZXJBbHdheXNFbmFibGVkKCkpCiAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0
ZWRQcm9maWxlKGZhbHNlKQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVy
QWdlbnQ6OmFkZFByb2ZpbGVGaW5pc2hlZE1lc3NhZ2VUb0NvbnNvbGUoUGFzc1JlZlB0cjxTY3Jp
cAogICAgIFJlZlB0cjxTY3JpcHRQcm9maWxlPiBwcm9maWxlID0gcHJwUHJvZmlsZTsKICAgICBT
dHJpbmcgdGl0bGUgPSBwcm9maWxlLT50aXRsZSgpOwogICAgIFN0cmluZyBtZXNzYWdlID0gbWFr
ZVN0cmluZygiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vIiwgQ1BVUHJvZmlsZVR5cGUsICcv
JywgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRsZSksICcjJywgU3RyaW5nOjpudW1i
ZXIocHJvZmlsZS0+dWlkKCkpLCAiXCIgZmluaXNoZWQuIik7Ci0gICAgbV9pbnNwZWN0b3JDb250
cm9sbGVyLT5jb25zb2xlQWdlbnQoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3Vy
Y2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZVVSTCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+Y29uc29sZUFnZW50KCktPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgTG9nTWVzc2Fn
ZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwogfQogCiB2b2lkIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OmFkZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25z
dCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmFk
ZFN0YXJ0UHJvZmlsaW5nTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIHRpdAogICAgIGlm
ICghbV9mcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwogICAgIFN0cmluZyBtZXNzYWdlID0gbWFr
ZVN0cmluZygiUHJvZmlsZSBcIndlYmtpdC1wcm9maWxlOi8vIiwgQ1BVUHJvZmlsZVR5cGUsICcv
JywgZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh0aXRsZSksICIjMFwiIHN0YXJ0ZWQuIik7
Ci0gICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jb25zb2xlQWdlbnQoKS0+YWRkTWVzc2FnZVRv
Q29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWws
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+
Y29uc29sZUFnZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dN
ZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VV
UkwpOwogfQogCiBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Y3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKQpA
QCAtMjM1LDcgKzIzNSw3IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RhcnRVc2Vy
SW5pdGlhdGVkUHJvZmlsaW5nKCkKICAgICBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxl
ID0gdHJ1ZTsKICAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2Zp
bGVOYW1lKHRydWUpOwogI2lmIFVTRShKU0MpCi0gICAgSlNDOjpFeGVjU3RhdGUqIHNjcmlwdFN0
YXRlID0gdG9KU0RPTVdpbmRvdyhtX2luc3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2Uo
KS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6
OkV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdG9yQWdlbnQt
Pmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCksIGRlYnVnZ2VyV29ybGQoKSktPmdsb2JhbEV4
ZWMoKTsKICNlbHNlCiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gMDsKICNlbmRpZgpA
QCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6c3RvcFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmcoYm9vbCBpZ25vcmVQcm9maWxlKQogICAgIG1fcmVjb3JkaW5nVXNl
ckluaXRpYXRlZFByb2ZpbGUgPSBmYWxzZTsKICAgICBTdHJpbmcgdGl0bGUgPSBnZXRDdXJyZW50
VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKCk7CiAjaWYgVVNFKEpTQykKLSAgICBKU0M6OkV4ZWNT
dGF0ZSogc2NyaXB0U3RhdGUgPSB0b0pTRE9NV2luZG93KG1faW5zcGVjdG9yQ29udHJvbGxlci0+
aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSwgZGVidWdnZXJXb3JsZCgpKS0+Z2xvYmFsRXhl
YygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSA9IHRvSlNET01XaW5kb3cobV9p
bnNwZWN0b3JBZ2VudC0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKSwgZGVidWdnZXJXb3Js
ZCgpKS0+Z2xvYmFsRXhlYygpOwogI2Vsc2UKICAgICAvLyBVc2UgbnVsbCBzY3JpcHQgc3RhdGUg
dG8gYXZvaWQgZmlsdGVyaW5nIGJ5IGNvbnRleHQgc2VjdXJpdHkgdG9rZW4uCiAgICAgLy8gQWxs
IGZ1bmN0aW9ucyBmcm9tIGFsbCBpZnJhbWVzIHNob3VsZCBiZSB2aXNpYmxlIGZyb20gSW5zcGVj
dG9yIFVJLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBy
b2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmgKaW5kZXggNDM2YWU1MS4uMDlkZTcxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCkBAIC00MSw3ICs0MSw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc3BlY3RvckFycmF5OwotY2xhc3MgSW5zcGVj
dG9yQ29udHJvbGxlcjsKK2NsYXNzIEluc3BlY3RvckFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmQ7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBTY3JpcHRIZWFwU25hcHNob3Q7
CkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFNjcmlwdFByb2ZpbGU7CiBjbGFzcyBJbnNwZWN0b3JQ
cm9maWxlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JQcm9maWxl
ckFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckNvbnRyb2xs
ZXIqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBjcmVh
dGUoSW5zcGVjdG9yQWdlbnQqKTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JQcm9maWxlckFnZW50
KCk7CiAKICAgICB2b2lkIGFkZFByb2ZpbGUoUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQ
cm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CkBA
IC03NywxMSArNzcsMTEgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQg
aW50LCBSZWZQdHI8U2NyaXB0UHJvZmlsZT4gPiBQcm9maWxlc01hcDsKICAgICB0eXBlZGVmIEhh
c2hNYXA8dW5zaWduZWQgaW50LCBSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiA+IEhlYXBTbmFw
c2hvdHNNYXA7CiAKLSAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckNvbnRyb2xs
ZXIqKTsKKyAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3BlY3RvckFnZW50Kik7CiAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNyZWF0ZVByb2ZpbGVIZWFkZXIoY29uc3QgU2Ny
aXB0UHJvZmlsZSYgcHJvZmlsZSk7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNy
ZWF0ZVNuYXBzaG90SGVhZGVyKGNvbnN0IFNjcmlwdEhlYXBTbmFwc2hvdCYgc25hcHNob3QpOwog
Ci0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIElu
c3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kKiBt
X2Zyb250ZW5kOwogICAgIGJvb2wgbV9lbmFibGVkOwogICAgIGJvb2wgbV9yZWNvcmRpbmdVc2Vy
SW5pdGlhdGVkUHJvZmlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZGZmODkzNS4uM2Y3NGFiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMS0yMiAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbmV0IHN0ZXAgaW4gc3BsaXR0aW5nIElu
c3BlY3RvckNvbnRyb2xsZXIuCisKKyAgICAgICAgI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIgd2FzIGFkZGVkLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01Mjk1NQorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yU2Vy
dmVyUXQuY3BwOgorCiAyMDExLTAxLTIyICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JTZXJ2ZXJRdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAppbmRleCA3
MDAyZGNlLi5iYWQyNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0luc3BlY3RvclNlcnZlclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcApAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGll
bnRRdC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJNRDUu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAicXdlYnBhZ2UuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>