<?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>218178</bug_id>
          
          <creation_ts>2020-10-26 05:43:25 -0700</creation_ts>
          <short_desc>Remove uses of MakeCurrent from WebGL implementation</short_desc>
          <delta_ts>2020-11-13 01:53:28 -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>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>218803</dependson>
          <blocked>217211</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1701413</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-26 05:43:25 -0700</bug_when>
    <thetext>Remove uses of MakeCurrent from WebGL implementation

MakeCurrent is implementation detail of the particular context class, and should be only called by the public entry points of each class and the corresponding extension class.

It does not make sense for &quot;remote webgl context&quot; to have a MakeCurrent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701802</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-27 02:14:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/70714561&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1701806</commentid>
    <comment_count>2</comment_count>
      <attachid>412405</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-10-27 03:15:28 -0700</bug_when>
    <thetext>Created attachment 412405
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706413</commentid>
    <comment_count>3</comment_count>
      <attachid>413807</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-11-11 03:36:23 -0800</bug_when>
    <thetext>Created attachment 413807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706414</commentid>
    <comment_count>4</comment_count>
      <attachid>413807</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-11-11 03:38:49 -0800</bug_when>
    <thetext>Comment on attachment 413807
Patch

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

&gt; Source/WebCore/platform/graphics/angle/GraphicsContextGLANGLE.cpp:-647
&gt; -    moveErrorsToSyntheticErrorList();

Added this hunk since Dean&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706424</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-11 04:28:06 -0800</bug_when>
    <thetext>Committed r269680: &lt;https://trac.webkit.org/changeset/269680&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413807.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706453</commentid>
    <comment_count>6</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-11 08:00:51 -0800</bug_when>
    <thetext>(In reply to EWS from comment #5)
&gt; Committed r269680: &lt;https://trac.webkit.org/changeset/269680&gt;
This seems to have broken webgl/1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html on ios-wk2.

EWS also indicated this failure in https://ews-build.webkit.org/#/builders/51/builds/1638, should have waited for EWS to finish before cq+ing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1706458</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-11-11 08:15:41 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 218803</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707132</commentid>
    <comment_count>8</comment_count>
      <attachid>414006</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2020-11-12 23:53:37 -0800</bug_when>
    <thetext>Created attachment 414006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707161</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-13 01:53:26 -0800</bug_when>
    <thetext>Committed r269768: &lt;https://trac.webkit.org/changeset/269768&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414006.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412405</attachid>
            <date>2020-10-27 03:15:28 -0700</date>
            <delta_ts>2020-11-11 03:36:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218178-20201027121524.patch</filename>
            <type>text/plain</type>
            <size>200883</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5MDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM3NTFhZGRhM2MzNGFj
MDc0ZjQ4NzVjZWRmZWI4OTJhY2I1ZjYxZS4uMmM5Zjg4MDkzYzY5ODRlZTA1YzVlODkxNWEzZTdl
MTkxNDEzNzM3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0yNyAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1c2Vz
IG9mIE1ha2VDdXJyZW50IGZyb20gV2ViR0wgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODE3OAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzA3MTQ1NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgor
CisgICAgICAgIFdvcmsgdG93YXJkcyBXZWJHTCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjb25jcmV0ZSBjbGFzcy4KKworICAgICAg
ICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKSB0bwor
ICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBj
YWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFsbCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQg
bWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNl
cyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBDaGVjayBhbGwgcmV0dXJuIHZhbHVlcyBv
ZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAgICAgc2hvdWxkIG5vdCBjYWxsIGludG8g
T3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJyZW50LAorICAgICAgICBhcyB0aGF0IGNh
biBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3IgaW5jb3JyZWN0IHJlc3VsdHMuCisgICAg
ICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90
IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5l
ci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhl
IG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGlu
dG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAg
ICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVt
ZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRpcmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlv
bnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAgICAgdGhyb3VnaCBnZXRFeHRlbnNpb25z
KCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBjb2RlCisgICAgICAgIGluc2lk
ZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8K
KyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4gVGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24g
YmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dM
LCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJhY3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1
cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQgdG8KKyAgICAgICAgdHdvLiBUaGlzIGlz
IHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwKKyAgICAg
ICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBpbiB0aGlzIHJlZ2FyZC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVydGV4QXR0cmliMCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhB
cnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJh
d0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdB
cnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RmxvYXR2Um9idXN0QU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTNEUm9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRl
eEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJpX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSXVpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmk2NHZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyUGFyYW1l
dGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRl
eExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVu
aWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlckl1aXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxl
clBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFj
aGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBh
cmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFy
YW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4
UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJs
b2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRl
U3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1
ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRy
YW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5H
TC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6Omlz
VmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxp
ZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZv
TG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTAtMjcgIFRldHN1aGFydSBPaHpla2kgIDx0
ZXRzdWhhcnUub2h6ZWtpQGdtYWlsLmNvbT4KIAogICAgICAgICBNYWtlIFdlYkNvcmU6OkZvY3Vz
RGlyZWN0aW9uIHRvIGVudW0gY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggOTNmYjlkODk3NWJi
MjJkNTg1MDJiNGM5YTViNTE2NmUyNDgyNDg1Yi4uMzlmODdlNDI3MjllZWY0MTk5MzRhNmY1MjVi
MGJjZTBlN2M2M2ZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTcxMSw3ICs3MTEsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y3JlYXRlKENhbgogICAgIH0KIAogICAgIGF1dG8gY29udGV4dCA9IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdyk7Ci0gICAgaWYg
KCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkgeworICAgIGlmICgh
Y29udGV4dCkgewogICAgICAgICBpZiAoY2FudmFzRWxlbWVudCkgewogICAgICAgICAgICAgY2Fu
dmFzRWxlbWVudC0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsCiAgICAgICAgICAgICAgICAg
RXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6OlllcywgIkNvdWxkIG5v
dCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKQEAgLTQzNDksOSArNDM0OSwxMCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50
IHksIEdDR0xzaXplaSB3aWR0aAogICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMuYmFzZUFkZHJlc3Mo
KTsKIAogI2lmIFVTRShBTkdMRSkKLSAgICAgICAgR0NHTHNpemVpIGxlbmd0aCwgY29sdW1ucywg
cm93czsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkucmVhZG5QaXhlbHNSb2J1c3RBTkdMRSh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5ieXRlTGVuZ3RoKCksICZsZW5ndGgs
ICZjb2x1bW5zLCAmcm93cywgZGF0YSwgZmFsc2UpOworICAgIEdDR0xzaXplaSBsZW5ndGggPSAw
OworICAgIEdDR0xzaXplaSBjb2x1bW5zID0gMDsKKyAgICBHQ0dMc2l6ZWkgcm93cyA9IDA7Cisg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkucmVhZG5QaXhlbHNSb2J1c3RBTkdMRSh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy5ieXRlTGVuZ3RoKCksICZsZW5n
dGgsICZjb2x1bW5zLCAmcm93cywgZGF0YSwgZmFsc2UpOwogI2Vsc2UKICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCiAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
LmJ5dGVMZW5ndGgoKSwgZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKaW5kZXggOTY5YmFm
Y2M4NzlhMDkwYjAzY2JmNDVkMTg0Y2YxMjFmZjQxYWZiYS4uMzQ2ZDM2ZGU5NTg1ZTY4M2RiMzJh
YzI2MjMwZDNmMmE4YTMyOTE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcApAQCAtNzQsOSAr
NzQsMTEgQEAgRXh0ZW5zaW9uc0dMQU5HTEU6On5FeHRlbnNpb25zR0xBTkdMRSgpID0gZGVmYXVs
dDsKIAogYm9vbCBFeHRlbnNpb25zR0xBTkdMRTo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgaWYg
KCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykgeworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7Ci0KKyAgICB9CiAgICAgcmV0
dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOwogfQogCkBAIC04NCw3ICs4Niw4IEBAIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KS4K
ICAgICBpZiAobV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkgJiYgIW1fZW5h
YmxlZEV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBnbDo6UmVxdWVzdEV4dGVuc2lv
bkFOR0xFKG5hbWUuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBtX2VuYWJsZWRFeHRlbnNpb25z
LmFkZChuYW1lKTsKIApAQCAtMTA3LDcgKzExMCw5IEBAIGludCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiAKIFN0cmluZyBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQog
ewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAg
ICBpbnQgc291cmNlTGVuZ3RoID0gMDsKICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRl
ciwgR0xfVFJBTlNMQVRFRF9TSEFERVJfU09VUkNFX0xFTkdUSF9BTkdMRSwgJnNvdXJjZUxlbmd0
aCk7CiAgICAgaWYgKCFzb3VyY2VMZW5ndGgpCkBAIC0xNjEsMTkgKzE2NiwyNSBAQCB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWl2RVhUKEdDR0x1aW50LCBpbnQsIEdDR0xzaXpl
aSwgaW50ICopCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpibGl0RnJhbWVidWZmZXIobG9uZyBz
cmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9u
ZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNp
Z25lZCBsb25nIGZpbHRlcikKIHsKICAgICAvLyBGSVhNRTogY29uc2lkZXIgYWRkaW5nIHN1cHBv
cnQgZm9yIEFQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlLgotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxpdEZyYW1lYnVmZmVyQU5HTEUoc3Jj
WDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNr
LCBmaWx0ZXIpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSh0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZv
cm1HTE9iamVjdCBFeHRlbnNpb25zR0xBTkdMRTo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBh
cnJheSA9IDA7CiAgICAgZ2w6OkdlblZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogICAgIHJl
dHVybiBhcnJheTsKQEAgLTE4NCw3ICsxOTUsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJy
YXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiB9CiAK
QEAgLTE5MywxMyArMjA2LDE3IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTEFOR0xFOjppc1Zl
cnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJheU9FUyhhcnJh
eSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6QmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIApAQCAtMjI4
LDI1ICsyNDUsMzMgQEAgYm9vbCBFeHRlbnNpb25zR0xBTkdMRTo6c3VwcG9ydHNFeHRlbnNpb24o
Y29uc3QgU3RyaW5nJiBuYW1lKQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QnVmZmVy
c0VYVChHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3QnVmZmVyc0VYVChuLCBi
dWZzKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZHJhd0FycmF5c0luc3RhbmNlZChH
Q0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBw
cmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUobW9kZSwgZmlyc3QsIGNvdW50LCBwcmlt
Y291bnQpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBsb25nIGxv
bmcgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUo
bW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29y
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKGluZGV4LCBkaXZpc29yKTsKIH0KIApAQCAtMjcxLDk3
ICsyOTYsMTI5IEBAIEdDR0xlbnVtIEV4dGVuc2lvbnNHTEFOR0xFOjphZGp1c3RXZWJHTDFUZXh0
dXJlSW50ZXJuYWxGb3JtYXQoR0NHTGVudW0gaW50ZXJuYWxmCiAvLyBHTF9BTkdMRV9yb2J1c3Rf
Y2xpZW50X21lbW9yeQogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RB
TkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xlYW52Um9idXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBh
cmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZm
ZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RmxvYXR2Um9idXN0QU5H
TEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwg
R0NHTGZsb2F0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0RmxvYXR2Um9idXN0QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0
aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dlJvYnVzdEFOR0xFKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcnZSb2J1c3RB
TkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0SW50ZWdlcnZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UHJvZ3JhbWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UHJvZ3JhbWl2Um9idXN0
QU5HTEUocHJvZ3JhbSwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdM
RShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50
IHNoYWRlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0U2hhZGVyaXZSb2J1c3RBTkdMRShzaGFkZXIsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKnBh
cmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldFRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJh
bWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4UGFy
YW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm1mdlJvYnVzdEFOR0xF
KEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1mdlJvYnVzdEFOR0xFKHBy
b2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dyYW0s
IGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dM
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRVbmlmb3JtaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRW
ZXJ0ZXhBdHRyaWJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYml2
Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYml2
Um9idXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5H
TEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIHZvaWQgKipwb2ludGVyKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliUG9pbnRlcnZSb2J1
c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcG9pbnRlcik7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRShpbnQgeCwgaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xzaXpl
aSAqY29sdW1ucywgR0NHTHNpemVpICpyb3dzLCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpSZWFkUGl4ZWxzUm9idXN0
QU5HTEUoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBsZW5ndGgs
IGNvbHVtbnMsIHJvd3MsIHBpeGVscyk7CiB9CiAKQEAgLTM2OSwyMDIgKzQyNiwyNjggQEAgdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBpbnQgaW4KIHsKICAgICBpZiAoIW1fY29udGV4dC0+bV9pc0ZvcldlYkdM
MikKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBhZGp1c3RXZWJHTDFUZXh0dXJlSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSk7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFnZTJEUm9idXN0QU5HTEUodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBidWZTaXplLCBwaXhlbHMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0
ZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMZmxvYXQgKnBhcmFtcykKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFBhcmFtZXRlcmZ2
Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGludCAqcGFy
YW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VGV4UGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhTdWJJbWFn
ZTJEUm9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBwaXhlbHMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdl
dCwgaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5H
TEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
aW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkRSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBs
ZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFO
R0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Y29tcHJlc3NlZFRleEltYWdlM0RSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBs
ZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVp
IGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXpl
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhJbWFnZTNE
Um9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEUm9idXN0QU5HTEUoR0NHTGVu
dW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHpvZmZz
ZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVpIGRlcHRoLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBj
b25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OnRleEltYWdlM0RSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZl
bCwgaW50IGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xzaXplaSBkZXB0aCwgaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4SW1hZ2UzRFJvYnVz
dEFOR0xFKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlM0RSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlRleFN1YkltYWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBidWZTaXplLCBw
aXhlbHMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVyeWl2Um9idXN0QU5HTEUodGFy
Z2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IGlkLCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMdWlu
dCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0UXVlcnlPYmplY3R1aXZSb2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVy
UG9pbnRlcnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQ
b2ludGVydlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1z
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcmlfdlJvYnVzdEFOR0xF
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dM
c2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEludGVnZXJpX3ZSb2J1c3RBTkdMRSh0YXJn
ZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRJbnRlcm5hbGZvcm1hdGl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZXJuYWxmb3JtYXRpdlJv
YnVzdEFOR0xFKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYklp
dlJvYnVzdEFOR0xFKEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJ
aXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSXVpdlJvYnVzdEFOR0xF
KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMdWludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliSXVpdlJvYnVzdEFO
R0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3Jh
bSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUocHJvZ3JhbSwgbG9jYXRpb24s
IGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dM
dWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybUJsb2Nr
aXZSb2J1c3RBTkdMRShwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdl
cjY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQ2NCAqZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEludGVnZXI2NHZSb2J1c3RBTkdMRShwbmFt
ZSwgYnVmU2l6ZSwgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihkYXRhKSk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXI2NGlfdlJvYnVzdEFOR0xFKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUodGFy
Z2V0LCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihk
YXRhKSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmk2
NHZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0QnVmZmVyUGFy
YW1ldGVyaTY0dlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVp
bnRlcnByZXRfY2FzdDxHTGludDY0Kj4ocGFyYW1zKSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGludCAqcGFyYW0pCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1w
bGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0p
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVyZnZSb2J1c3RB
TkdMRShHQ0dMdWludCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IGNvbnN0IEdDR0xmbG9hdCAqcGFyYW0pCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyZnZSb2J1c3RBTkdMRShzYW1w
bGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xF
OjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMdWludCBzYW1wbGVyLCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50
ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwg
YnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRTYW1wbGVyUGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMdWludCBzYW1wbGVyLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQg
KnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0RnJhbWVidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGlu
dCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0RnJhbWVidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5h
bWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgR0NH
TGVudW0gcHJvZ3JhbUludGVyZmFjZSwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UHJvZ3JhbUludGVyZmFjZWl2
Um9idXN0QU5HTEUocHJvZ3JhbSwgcHJvZ3JhbUludGVyZmFjZSwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0Qm9vbGVhbmlf
dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGJvb2xlYW4gKmRhdGEpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCb29sZWFuaV92
Um9idXN0QU5HTEUodGFyZ2V0LCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAq
bGVuZ3RoLCBHQ0dMZmxvYXQgKnZhbCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldE11bHRpc2FtcGxlZnZSb2J1c3RBTkdMRShwbmFtZSwg
aW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdmFsKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdM
RTo6Z2V0VGV4TGV2ZWxQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50
IGxldmVsLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFy
Z2V0LCBsZXZlbCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4TGV2ZWxQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVy
ZnZSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFBvaW50ZXJ2Um9idXN0QU5H
TEVSb2J1c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCB2b2lkICoqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xF
KHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKQEAgLTU4MSw3ICs3MDQsOSBA
QCBzdGF0aWMgdm9pZCB3aXBlQWxwaGFDaGFubmVsRnJvbVBpeGVscyhpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFk
blBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJv
d3MsIHZvaWQgKmRhdGEsIGJvb2wgcmVhZGluZ1RvUGl4ZWxCdWZmZXJPYmplY3QpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGku
ZS4sCiAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgcmVhZGluZyBwaXhlbHMuCiAgICAgZ2w6OkZsdXNoKCk7CkBAIC02MTYsODYgKzc0MSwx
MTQgQEAgdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZG5QaXhlbHNSb2J1c3RBTkdMRShpbnQg
eCwgaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0MKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQgKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dG5Vbmlmb3JtZnZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3Ro
LCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldG5Vbmlmb3JtaXZSb2J1c3RB
TkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50
IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMdWludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBs
b2NhdGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjp0ZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTGludCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFy
YW1ldGVySWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4UGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBH
Q0dMdWludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VGV4UGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUs
IGJ1ZlNpemUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBh
cmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4
UGFyYW1ldGVySWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0ZXJJdWl2
Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMdWludCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4UGFyYW1ldGVy
SXVpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFO
R0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
Y29uc3QgR0NHTGludCAqcGFyYW0pCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUoc2FtcGxl
ciwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
c2FtcGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShHQ0dMdWludCBzYW1wbGVyLCBHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0x1aW50ICpwYXJhbSkKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQ
YXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlcklpdlJvYnVz
dEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJJ
aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVz
dEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVy
SXVpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpdlJvYnVzdEFO
R0xFKEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdGl2Um9idXN0QU5HTEUo
aWQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0aTY0dlJvYnVzdEFOR0xFKEdDR0x1aW50IGlkLCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50
NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aTY0dlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3R1aTY0dlJvYnVzdEFOR0xFKEdDR0x1
aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMdWludDY0ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5HTEUoaWQs
IHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50NjQqPihwYXJh
bXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdMRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAppbmRleCA0NjVlZjI0
M2YzODZlYjJmODJjOTI2NGUxMGI4ZTM4MDU4MWM5MWIyLi41YjVkZTgzMDMzYjJlMjgwMGFhZmFh
MGY3ODNiMDVkYjhmZmIzZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcApA
QCAtMTgxLDExICsxODEsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBz
dGQ6Om1pbig0LCBtYXhTYW1wbGVDb3VudCk7CiAgICAgICAgIGdsOjpCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBnbDo6QmluZFJlbmRl
cmJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAg
ICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVO
REVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdM
X1JFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKICAgICAgICAgaWYgKGF0dHJzLnN0ZW5jaWwgfHwgYXR0cnMuZGVwdGgp
IHsKICAgICAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBnZXRFeHRlbnNpb25z
KCkucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMX1JFTkRFUkJVRkZFUiwgc2FtcGxl
Q291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRShHTF9SRU5ERVJC
VUZGRVIsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgICAgICAvLyBXZWJHTCAxLjAncyBydWxlcyBzdGF0ZSB0aGF0IGNvbWJp
bmVkIGRlcHRoL3N0ZW5jaWwgcmVuZGVyYnVmZmVycwogICAgICAgICAgICAgLy8gaGF2ZSB0byBi
ZSBhdHRhY2hlZCB0byB0aGUgc3ludGhldGljIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCBwb2lu
dC4KICAgICAgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIGludGVybmFsRGVwdGhT
dGVuY2lsRm9ybWF0ID09IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTKQpAQCAtMzIwLDEzICszMjAs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWMKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBNQVhfVEVYVFVS
RV9TSVpFOgogICAgICAgICBnbDo6R2V0SW50ZWdlcnYoTUFYX1RFWFRVUkVfU0laRSwgdmFsdWUp
OwpAQCAtMzU5LDEzICszNjMsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyaV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBp
bmRleCwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEludGVnZXJpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dMZW51bSBzaGFkZXJUeXBl
LCBHQ0dMZW51bSBwcmVjaXNpb25UeXBlLCBHQ0dMaW50KiByYW5nZSwgR0NHTGludCogcHJlY2lz
aW9uKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsIHByZWNpc2lvbik7CiB9CiAK
QEAgLTM4MiwxMyArMzkwLDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleElt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNs
YW1wZiB6RmFyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXB0aFJhbmdlZihz
dGF0aWNfY2FzdDxmbG9hdD4oek5lYXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4oekZhcikpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVw
dGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyRGVwdGhmKHN0YXRpY19j
YXN0PGZsb2F0PihkZXB0aCkpOwogfQogCkBAIC00MDMsNyArNDE1LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoLAogewogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxz
IHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gYWxsIHByZXZpb3Vz
IHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZsdXNoKCk7CiAgICAgYXV0byBhdHRycyA9IGNv
bnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lz
Rm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGlj
c0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CkBAIC01MTgsNyArNTMyLDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIGlmIChtX2xheWVyQ29tcG9z
aXRlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcHJlcGFy
ZVRleHR1cmVJbXBsKCk7CiB9CiAKQEAgLTU2OCw3ICs1ODQsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMs
IGludCBwaQogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRI
ZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAg
IEdDR0xlbnVtIGZyYW1lYnVmZmVyVGFyZ2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29u
dGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSIDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVS
OwogCkBAIC02MjQsOSArNjQyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7
Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKQEAgLTYzNCwxMiArNjQ5LDE0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVu
dEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIG1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwog
CkBAIC02NjIsMTEgKzY3OSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBnbDo6Q29sb3JNYXNrKEdMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwogICAgIGlmIChhdHRycy5kZXB0aCkgewogICAgICAg
ICBnbDo6R2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKDEpOworICAgICAgICBnbDo6
Q2xlYXJEZXB0aGYoMS4wZik7CiAgICAgICAgIGdsOjpHZXRCb29sZWFudihHTF9ERVBUSF9XUklU
RU1BU0ssICZkZXB0aE1hc2spOwogICAgICAgICBnbDo6RGVwdGhNYXNrKEdMX1RSVUUpOwogICAg
ICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKICAgICB9CisKICAgICBpZiAo
YXR0cnMuc3RlbmNpbCkgewogICAgICAgICBnbDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVB
Ul9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CiAgICAgICAgIGdsOjpDbGVhclN0ZW5jaWwoMCk7CkBA
IC02ODIsNyArNzAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgZ2w6OkNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwg
Y2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CiAgICAgZ2w6OkNv
bG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1h
c2tbM10pOwogICAgIGlmIChhdHRycy5kZXB0aCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgZ2w6OkNsZWFyRGVwdGhm
KGNsZWFyRGVwdGgpOwogICAgICAgICBnbDo6RGVwdGhNYXNrKGRlcHRoTWFzayk7CiAgICAgfQog
ICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CkBAIC03MDksNyArNzI3LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0g
dGV4dHVyZTsKICAgICBnbDo6QWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTcxOCwyNiAr
NzM4LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0p
OwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpBdHRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBp
bmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVm
ZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgR0x1aW50IGZibzsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8g
PSBidWZmZXI7CkBAIC03NTYsMTA3ICs3ODQsMTQxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsK
IH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0
LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIGdsOjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFt
cGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxw
aGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVu
ZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxw
aGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRXF1YXRpb25TZXBhcmF0
ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xl
bnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdCLCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0g
ZHN0QWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuY1NlcGFy
YXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVp
cHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdDR0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lk
KiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCdWZmZXJTdWJEYXRhKHRh
cmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsKIH0KIAogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwg
b2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51
bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0
LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6Q29weUJ1ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVU
YXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xpbnQqIHBhcmFtcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50
ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFy
YW1zKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwogfQpAQCAtODY0LDQ2ICs5MjYsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0MKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xl
bnVtIHBuYW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihw
cm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXplKCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5h
bWUsIHBhcmFtcy5kYXRhKCkpOwogfQogCiBHQ0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHRhcmdldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NH
TGNsYW1wZiBhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckNvbG9yKHIs
IGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dM
Yml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXIobWFz
ayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xl
YW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
CiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gV2Ug
bmVlZCB0aGUgQU5HTEVfdGV4dHVyZV9yZWN0YW5nbGUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9T
dXJmYWNlCiAgICAgLy8gYmFja2J1ZmZlcnMsIGJ1dCB3ZSBkb24ndCB3YW50IGl0IGV4cG9zZWQg
dG8gV2ViR0wgdXNlciBzaGFkZXJzLgogICAgIC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgaXQgZHVy
aW5nIHNoYWRlciBjb21waWxhdGlvbi4KQEAgLTkxNSwxMyArOTkxLDE3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIp
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRm
b3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpDb21waWxlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwog
ICAgIEdDR0xlbnVtIGZyYW1lYnVmZmVyVGFyZ2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNz
Q29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSIDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVG
RkVSOwogCkBAIC05MzYsNyArMTAxNiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdD
R0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVz
KCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3Jh
cGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJB
TUVCVUZGRVI7CiAKQEAgLTk1MSwxOSArMTAzMywyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC05
NzEsODIgKzEwNTksMTA4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNo
YWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6RHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BV
U3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50
cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRw
dHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG9mZnNldCkpKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZsdXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1
c2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBy
ZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4
dHVyZSwgR0NHTGludCBsZXZlbCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RnJh
bWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVu
dEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJv
bnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZy
b250RmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJh
dGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCkBAIC0xMDU2LDcgKzExNzAsOSBAQCBib29s
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3Jh
bWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0
ZVNpemUpOwogICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdM
X0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgpA
QCAtMTA4NSw3ICsxMjAxLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0
aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0cKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50
IG1heFVuaWZvcm1TaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CiAKQEAgLTExMTQsNyAr
MTIzMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVy
cyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKIH0KIApAQCAtMTEyMyw3ICsxMjQzLDkgQEAgaW50IEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IGNvbnN0IFMKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiAtMTsKKwogCiAgICAgcmV0dXJuIGdsOjpHZXRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQpAQCAtMTEzNSw3ICsxMjU3LDkgQEAgaW50IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIGMKIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFy
eSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTExNjIs
MTkgKzEyODYsMjUgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9y
KCkKICAgICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0K
IAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKwogICAgIHJldHVybiBn
bDo6R2V0RXJyb3IoKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
dHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAg
ICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJp
bmcobmFtZSkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIApAQCAtMTE4MywxMyArMTMxMywxNyBAQCBHQ0dM
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVm
ZmVyKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxl
ZChHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc0VuYWJsZWQoY2FwKTsKIH0KIApAQCAtMTE5OCw3ICsxMzMyLDkgQEAgR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9i
amVjdCBmcmFtZWJ1ZmZlcikKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6
OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIpOwogfQogCkBAIC0xMjA3LDcgKzEzNDMsOSBAQCBH
Q0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSkKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNQcm9n
cmFtKHByb2dyYW0pOwogfQogCkBAIC0xMjE2LDcgKzEzNTQsOSBAQCBHQ0dMYm9vbGVhbiBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5k
ZXJidWZmZQogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKQEAgLTEyMjUsNyArMTM2NSw5IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNo
YWRlcikKICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIp
OwogfQogCkBAIC0xMjM0LDQ0ICsxMzc2LDU4IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICgh
dGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkxpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6UGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFj
dG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVy
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUs
IGludmVydCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKIH0KIApAQCAtMTI3OSw3ICsxNDM1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIHsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENT
dHJpbmcmIHNoYWRlclNvdXJjZUNTdHJpbmcgPSBzdHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNo
YXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRlclNvdXJjZUNTdHJpbmcuZGF0YSgpOwpAQCAtMTI4
OSwxNzggKzE0NDYsMjM0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVm
LCBHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2ls
RnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xp
bnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpT
dGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxNYXNrKG1hc2spOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2Us
IEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxN
YXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBh
c3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BT
ZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NH
TGVudW0genBhc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxPcFNl
cGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTGZsb2F0IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQ
YXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJh
bWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtMmYobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNp
emUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVk
cyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVu
aWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NH
TGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUs
IGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZs
b2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlv
biwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwg
YXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NH
TGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTJpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xz
aXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2koR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwg
R0NHTGludCB2MSwgR0NHTGludCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwg
Y29uc3QgR0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0z
aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEs
IEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRz
IHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5p
Zm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRy
YW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdD
R0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNv
bnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDE2LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7
CiB9CiAKQEAgLTE0NjgsNzkgKzE2ODEsMTA1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNT
RVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZhbGlkYXRlUHJv
Z3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25z
dCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0
ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZs
b2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihp
bmRleCwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEs
IHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2
KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgs
IEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYw
LCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihH
Q0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBu
b3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwg
dHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVyKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUs
IEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBzdHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwg
c2l6ZSwgdHlwZSwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZpZXdwb3J0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBHTHVpbnQgYXJyYXkgPSAwOwogICAgIGdsOjpHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsK
ICAgICByZXR1cm4gYXJyYXk7CkBAIC0xNTUwLDcgKzE3ODksOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQog
ewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiB9CiAKQEAgLTE1NTgsNTEg
KzE3OTksNjcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIGdsOjpJc1ZlcnRleEFycmF5KGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBH
Q0dMYm9vbGVhbiogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJv
b2xlYW52KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7
CiB9CiAgICAgCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50NjQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgICp2YWx1ZSA9IDA7CiAgICAgZ2w6OkdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0NHTGludDY0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3YocG5hbWUs
IGluZGV4LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
YXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGlmIChhdHRhY2htZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVO
VCkKICAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxf
QVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xNjEw
LDcgKzE4NjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjM4LDcg
KzE4OTcsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZv
TG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBsZW5ndGggPSAwOwogICAg
IGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsK
ICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2NTcsNyArMTkxOCw5IEBAIFN0cmluZyBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjY1LDcgKzE5MjgsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
ciwgR0NHTGVudW0gcG5hbQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0KIApA
QCAtMTY3Myw3ICsxOTM4LDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFk
ZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0g
MDsKICAgICBnbDo6R2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTY5NCwzMSArMTk2MSw0MSBAQCBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0KQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1m
dihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCog
dmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1mdihwcm9n
cmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5p
Zm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMdWludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkdldFVuaWZvcm11aXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApAQCAt
MTcyNiwyNSArMjAwMywzMiBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRV
bmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjbwogewogICAgIEFTU0VS
VChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIHJldHVybiBnbDo6R2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1aW50
IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwog
fQogCiBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJp
Yk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CiAKICAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRy
aWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKQEAgLTE3NTMsNyArMjAzNyw4IEBA
IEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhv
ZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dM
ZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQ
aXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlm
ZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCiAgICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwpAQCAtMTc2MiwyMSArMjA0NywyNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0
ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpD
b21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNl
ZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6Q29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVC
dWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAg
IGdsOjpHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE3ODQsNyArMjA3NSw5
IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZl
cigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZy
YW1lYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsK
ICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE3OTIs
MTMgKzIwODUsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJl
dHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZv
KTsKICAgICByZXR1cm4gbzsKQEAgLTE4MDYsMTMgKzIxMDMsMTcgQEAgUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIAogUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVt
IHR5cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNo
YWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xf
VkVSVEVYX1NIQURFUik7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1
aW50IG8gPSAwOwogICAgIGdsOjpHZW5UZXh0dXJlcygxLCAmbyk7CiAgICAgbV9zdGF0ZS50ZXh0
dXJlU2VlZENvdW50LmFkZChvKTsKQEAgLTE4MjEsMTMgKzIxMjIsMTcgQEAgUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSgpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZl
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVm
ZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2Vk
IGZvciBkcmF3aW5nCiAgICAgLy8gb3BlcmF0aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCiAg
ICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKQEAgLTE4NDIsMjUgKzIxNDcsMzMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBm
cmFtZWJ1ZmZlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3Jh
bShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAm
cmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
U2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3Rl
eHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewogICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUu
Zmlyc3QgPT0gdGV4dHVyZTsKICAgICB9KTsKQEAgLTE5MTYsNyArMjIyOSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3BhdGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24o
KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmICghbV9pc0ZvcldlYkdMMiAmJiBtX2V4dGVuc2lvbnMpCiAgICAgICAg
IGludGVybmFsZm9ybWF0ID0gbV9leHRlbnNpb25zLT5hZGp1c3RXZWJHTDFUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSk7CiAgICAgZ2w6OlRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwpAQCAtMTkyNSwzNCArMjI0MCw0NSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGludCBsZXZlbCwgRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlz
SW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OkRy
YXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGVs
c2UKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmly
c3QsIGNvdW50LCBwcmltY291bnQpOworICAgICAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5j
ZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50
cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAg
ICAgICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICBlbHNlCi0gICAgICAg
IGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUs
IG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICAgICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZEFO
R0xFKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBw
cmltY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50
IGRpdmlzb3IpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJE
aXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAgICBlbHNlCi0gICAgICAgIGdldEV4dGVuc2lvbnMo
KS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgZ2w6OlZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7CiB9CiAKIEdDR0x1aW50IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5pZm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CisKICAgICByZXR1
cm4gZ2w6OkdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUudXRm
OCgpLmRhdGEoKSk7CiB9CiAKQEAgLTE5NjksNyArMjI5NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwKIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0lu
ZGV4KQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKICAgICBHTGludCBtYXhMZW5ndGggPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RILCAmbWF4TGVuZ3RoKTsK
ICAgICBpZiAobWF4TGVuZ3RoIDw9IDApIHsKQEAgLTE5ODcsNyArMjMxNSw5IEBAIFN0cmluZyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxv
Y2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dy
YW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtQmxvY2tCaW5kaW5nKHBy
b2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKIH0KIApAQCAt
MTk5NSw3ICsyMzI1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJs
b2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wKIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5RdWVyaWVzKDEs
ICZuYW1lKTsKICAgICByZXR1cm4gbmFtZTsKQEAgLTIwMDMsMTkgKzIzMzUsMjUgQEAgUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmVn
aW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpFbmRRdWVyeSh0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWludCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50
KiBwYXJhbXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0
dWl2KGlkLCBwbmFtZSwgcGFyYW1zKTsKIH0KIApAQCAtMjAyMyw3ICsyMzYxLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0cKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5UcmFuc2Zvcm1GZWVkYmFja3MoMSwg
Jm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpAQCAtMjAzMSw0OSArMjM3MSw2NCBAQCBQbGF0Zm9y
bUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFj
aygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRi
YWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVl
ZGJhY2spOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFu
c2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNUcmFuc2Zvcm1GZWVk
YmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJp
bmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQsIHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51
bSBwcmltaXRpdmVNb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCZWdpblRy
YW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2ZU1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkVuZFRyYW5zZm9ybUZlZWRiYWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1v
ZGUpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgVmVjdG9yPENTdHJpbmc+IGNvbnZlcnRlZFZhcnlpbmdzID0gdmFyeWluZ3MubWFwKFtd
KGNvbnN0IFN0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1cm4gdmFyeWluZy51dGY4KCk7
CiAgICAgfSk7CiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBwb2ludGVyc1RvVmFyeWluZ3MgPSBj
b252ZXJ0ZWRWYXJ5aW5ncy5tYXAoW10oY29uc3QgQ1N0cmluZyYgdmFyeWluZykgewogICAgICAg
ICByZXR1cm4gdmFyeWluZy5kYXRhKCk7CiAgICAgfSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCBwb2ludGVy
c1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVyc1RvVmFyeWluZ3MuZGF0YSgpLCBidWZmZXJNb2Rl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgR0NHTHNpemVpIGJ1ZlNp
emUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OlRSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsK
ICAgICBpZiAoIWJ1ZlNpemUpCkBAIC0yMDkzLDcgKzI0NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShH
Q0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGluZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEJ1ZmZlckJhc2UodGFyZ2V0LCBp
bmRleCwgYnVmZmVyKTsKIH0KIApAQCAtMjEyNywzMiArMjQ4NCw0OSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dHB0ciBzcmNCeQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBzcmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBz
cmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGludCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGlu
dCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ssIEdDR0xlbnVtIGZpbHRlcikKIHsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmxpdEZy
YW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgx
LCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRh
Y2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQg
bGF5ZXIpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwg
dGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0
dGFjaG1lbnRzLCBjb25zdCBHQ0dMZW51bSogYXR0YWNobWVudHMpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVG
cmFtZWJ1ZmZlcih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0NHTGVudW0qIGF0
dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6
ZWkgaGVpZ2h0KQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIodGFyZ2V0LCBudW1BdHRh
Y2htZW50cywgYXR0YWNobWVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVh
ZEJ1ZmZlcihzcmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNl
dCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5
LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgYXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0g
ZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJF
QURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTIx
NjcsMTYzICsyNTQxLDIyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4
U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIEdDR0xpbnQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
CiAgICAgcmV0dXJuIGdsOjpHZXRGcmFnRGF0YUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgp
LmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWko
R0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm0xdWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NH
THVpbnQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWkobG9j
YXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTN1aShsb2NhdGlv
biwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWlu
dCB2MiwgR0NHTHVpbnQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm00dWkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMXVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBk
YXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGlu
dCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NH
THVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3Jt
M3Vpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgY29u
c3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNHVpdihsb2NhdGlvbiwg
c3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdD
R0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9y
bU1hdHJpeDJ4M2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09m
ZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgz
eDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xm
bG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwg
c3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNy
Y09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpVbmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBk
YXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xl
bmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4MmZ2
KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwg
R0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0
cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtTWF0cml4NHgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NH
THVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3Jt
TWF0cml4NHgzZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zm
c2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRp
KEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50
IHcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRl
eCwgeCwgeSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgsIGNvbnN0IEdDR0xpbnQqIHZhbHVlcykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliSTRpdihpbmRleCwgdmFsdWVz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShH
Q0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwgR0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVp
bnQgdykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aShp
bmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZl
cnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMdWludCogdmFsdWVzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwg
dmFsdWVzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxl
bWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVpbnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNp
emVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd1Jh
bmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVuZCwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
cmF3QnVmZmVycyhHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdC
dWZmZXJzKG4sIGJ1ZnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dM
aW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZm
ZXIsIGRyYXdidWZmZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVydWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBk
cmF3YnVmZmVyLCBjb25zdCBHQ0dMdWludCogdmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQpCiB7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dM
ZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMs
IEdDR0x1aW50IHNyY09mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdD
R0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVuY2lsKQogeworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcmZpKGJ1ZmZl
ciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVRdWVyaWVzKDEsICZxdWVyeSk7CiB9CiAKIEdD
R0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmpl
Y3QgcXVlcnkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGds
OjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMaW50IHZhbHVlOwogICAgIGdsOjpHZXRRdWVyeWl2
KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3Jt
R0xPYmplY3Q+KHZhbHVlKTsKQEAgLTIzMzEsNyArMjc2Nyw5IEBAIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0
ZVNhbXBsZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG5hbWUgPSAw
OwogICAgIGdsOjpHZW5TYW1wbGVycygxLCAmbmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0y
MzM5LDEwNCArMjc3NywxMzggQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpEZWxldGVTYW1wbGVycygxLCAmc2FtcGxlcik7CiB9CiAKIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBz
YW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6
SXNTYW1wbGVyKHNhbXBsZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
aW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0
Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBw
bmFtZSwgcGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVy
UGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
ZmxvYXQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJh
bWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyZnYoc2FtcGxlciwgcG5hbWUsIHZhbHVlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2
KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyaXYo
c2FtcGxlciwgcG5hbWUsIHZhbHVlKTsKIH0KIAogR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51bSBjb25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRp
dGlvbiwgZmxhZ3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAg
ICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMgc3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsKIH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdDR0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFn
cywgR0NHTHVpbnQ2NCB0aW1lb3V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxF
RDsKKwogICAgIHJldHVybiBnbDo6Q2xpZW50V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBz
eW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0xpbnQ2NCB0aW1lb3V0KQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpXYWl0U3luYyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN5bmNpdihHQ0dMc3luYyBzeW5jLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQgKnZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTeW5jaXYoc3luYywgcG5hbWUsIGJ1ZlNpemUs
IG51bGxwdHIsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1
c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBh
dXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRl
eCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlw
dHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmluZEJ1ZmZlclJhbmdl
KHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsKIH0KIAogVmVjdG9yPEdDR0x1
aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewog
ICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4geyB9OworCiAgICAgVmVjdG9y
PENTdHJpbmc+IHV0ZjggPSB1bmlmb3JtTmFtZXMubWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHgu
dXRmOCgpOyB9KTsKICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGNzdHIgPSB1dGY4Lm1hcChbXShh
dXRvJiB4KSB7IHJldHVybiB4LmRhdGEoKTsgfSk7CiAgICAgVmVjdG9yPEdDR0x1aW50PiByZXN1
bHQoY3N0ci5zaXplKCksIDApOwpAQCAtMjQ5OCw2NyArMjk3MCw4OSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdD
R0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0
LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVu
aWZvcm0xZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwg
Y29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xl
bmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlv
biwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRh
dGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQg
c3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBs
b2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xaXYo
bG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NH
TGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRpb24sIHNyY0xlbmd0
aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVp
bnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNl
dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGlu
dCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dM
dWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00
aXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNy
Y09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0
YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwg
ZGF0YSArIHNyY09mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TENvY29hLm1tCmluZGV4IDM0NGZlODQ5YTM3MDQyYzJmZDRmMDAxNWM4OTFmZTA4OWMyZDVkZTEu
Ljc1Y2IyNTgzZDkyY2E0ZTk1MTQ4MzhlNmZmNzBlNjJiYThmYzhiMDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQpAQCAtMzg4LDEwICszODgsOCBAQCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250
ZXh0R0xBdHRyaWJ1dGVzIGF0dAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCgpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpz
aGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4dCh0aGlzKTsKLQotICAgIGlmIChtX2NvbnRleHRP
YmopIHsKKyAgICBpZiAobWFrZUNvbnRleHRDdXJyZW50KCkpIHsKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7IC8vIFRPRE86IGNoZWNrIHJlc3VsdC4KICAgICAgICAgZ2w6
OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogCiAgICAgICAgIGlmIChhdHRycy5hbnRp
YWxpYXMpIHsKQEAgLTQwOCwxOCArNDA2LDE4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogICAgICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVz
KDEsICZtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlclRleHR1cmUpOwogICAgICAgICBpZiAobV9wcmVz
ZXJ2ZURyYXdpbmdCdWZmZXJGQk8pCiAgICAgICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJz
KDEsICZtX3ByZXNlcnZlRHJhd2luZ0J1ZmZlckZCTyk7Ci0KLSAgICAgICAgaWYgKG1fZGlzcGxh
eUJ1ZmZlclBidWZmZXIpIHsKLSAgICAgICAgICAgIEVHTF9SZWxlYXNlVGV4SW1hZ2UobV9kaXNw
bGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyLCBFR0xfQkFDS19CVUZGRVIpOwotICAgICAg
ICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1
ZmZlcik7Ci0gICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fZGlzcGxheUJ1ZmZlclBidWZmZXIp
CisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFjZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZl
clBidWZmZXIpOworICAgIGlmIChtX3dlYkdMTGF5ZXIpIHsKICAgICAgICAgYXV0byByZWN5Y2xl
ZEJ1ZmZlciA9IFttX3dlYkdMTGF5ZXIgcmVjeWNsZUJ1ZmZlcl07CiAgICAgICAgIGlmIChyZWN5
Y2xlZEJ1ZmZlci5oYW5kbGUpCiAgICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNw
bGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpOwogICAgICAgICBhdXRvIGNvbnRlbnRzSGFu
ZGxlID0gW21fd2ViR0xMYXllciBkZXRhY2hDbGllbnRdOwogICAgICAgICBpZiAoY29udGVudHNI
YW5kbGUpCiAgICAgICAgICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBjb250
ZW50c0hhbmRsZSk7Ci0KKyAgICB9CisgICAgaWYgKG1fY29udGV4dE9iaikgewogICAgICAgICBF
R0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2JqLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZB
Q0UsIEVHTF9OT19DT05URVhUKTsKICAgICAgICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eU9iaiwgbV9jb250ZXh0T2JqKTsKICAgICB9CkBAIC01NTMsMTIgKzU1MSwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRDb250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJs
ZSkKICNpZiBQTEFURk9STShNQUMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRh
dGVDR0xDb250ZXh0KCkKIHsKLSAgICBpZiAoIW1fY29udGV4dE9iaikKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQogICAgICAgICByZXR1cm47Ci0KICAgICBMT0coV2ViR0wsICJEZXRl
Y3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxheSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBk
YXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAg
ICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51bGxwdHI7CiAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0
dHJpYkVYVChtX2Rpc3BsYXlPYmosIEVHTF9ERVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVH
TEF0dHJpYio+KCZkZXZpY2UpKTsKICAgICBDR0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAppbmRleCBiYmQ5ZDQ0NmY5MWVkNWUxYmJi
YTRkMzcwMmQ0MzJmNzFlZmZhNGUwLi4xNzc4NmE2NGJhNGUxZGEwMDk2NGVhZTk5N2QyOTI3NjRk
YWQxODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcApAQCAtNTAsMTcgKzUwLDI1IEBA
IEV4dGVuc2lvbnNHTE9wZW5HTDo6fkV4dGVuc2lvbnNHTE9wZW5HTCgpID0gZGVmYXVsdDsKIAog
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAs
IHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
RVhUKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXlP
RVMoKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAg
IEdMdWludCBhcnJheSA9IDA7CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAg
ICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKQEAgLTc2LDcgKzg0LDkgQEAg
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oV0lOKQogICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCiAg
ICAgICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC05MCw3ICsxMDAsOSBA
QCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xPcGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwor
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJy
YXlPYmplY3RTdXBwb3J0ZWQoKSkKICAgICAgICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheShhcnJh
eSk7CkBAIC0xMDIsNyArMTE0LDkgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMOjpp
c1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0
ZWQoKSkKICAgICAgICAgZ2xCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwpAQCAtMTk2LDYgKzIxMCw5
IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dM
c2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1ZnMpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyAgRklYTUU6IGlt
cGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBwbGF0Zm9ybXMuCiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIDo6Z2xEcmF3QnVmZmVycyhuLCBidWZzKTsKQEAgLTIwNyw3ICsyMjQsOSBAQCB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQoR0NHTHNpemVpIG4sIGNvbnN0IEdDR0xl
bnVtKiBidWZzKQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNl
ZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXpl
aSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsRHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAjZWxzZQpAQCAtMjIwLDcgKzIzOSw5IEBAIHZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVu
dHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBl
LCBsb25nIGxvbmcgb2Zmc2V0LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShHVEspCiAgICAgOjpn
bERyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiAj
ZWxzZQpAQCAtMjM0LDcgKzI1NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LCBHCiAKIHZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBH
Q0dMdWludCBkaXZpc29yKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICNpZiBQTEFURk9STShHVEspCiAgICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3IoaW5k
ZXgsIGRpdmlzb3IpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCmluZGV4
IGY2NGJkZWUzMTI5MzNiZjNlZGQ1ZmJkZjUzMTkyZGI0NTRhN2VkYzYuLmFiOGNiNTRmNWU4Nzll
ZjRiOGE5MGQxOWE3ZWM5MmM4OWNlMjA1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVT
LmNwcApAQCAtODUsNiArODUsOCBAQCBib29sIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc0VuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0
ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKIHsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAo
bV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCiAgICAgICAgIG1fZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CiAgICAgZWxzZQpAQCAtOTMsNiArOTUsOCBA
QCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCiAgICAgICAgIG1fZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpAQCAtMTA2LDYgKzExMCw4IEBAIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8q
IHNyY1kwICovLCBsCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAg
IGVsc2UKQEAgLTEyOSw4ICsxMzUsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpwb3BH
cm91cE1hcmtlckVYVCh2b2lkKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKICAgICBpZiAobV9nbEdlblZlcnRleEFycmF5c09FUykgeworICAgICAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgR0x1aW50IGFycmF5ID0gMDsKICAgICAgICAgbV9nbEdlblZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOwogICAgICAgICByZXR1cm4gYXJyYXk7CkBAIC0xNDQsMzMgKzE1MSwz
NSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsK
LQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xEZWxl
dGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKIH0KIAogR0NHTGJvb2xlYW4g
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBh
cnJheSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsSXNWZXJ0ZXhB
cnJheU9FUykKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpIHsKKyAgICAgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotCisgICAg
fQogICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Ymlu
ZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJheU9FUykK
KyAgICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJheU9FUykgeworICAgICAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1f
Z2xCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiB9
CiAKQEAgLTE4OCw4ICsxOTcsOSBAQCBpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBo
aWNzUmVzZXRTdGF0dXNBUkIoKQogICAgIGlmIChtX2NvbnRleHRSZXNldFN0YXR1cyAhPSBHTF9O
T19FUlJPUikKICAgICAgICAgcmV0dXJuIG1fY29udGV4dFJlc2V0U3RhdHVzOwogICAgIGlmICht
X2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgICAgICBpbnQgcmVhc29uRm9yUmVzZXQgPSBtX2dsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0VYVCgpOworICAgICAgICBpbnQgcmVhc29uRm9yUmVzZXQgPSBVTktO
T1dOX0NPTlRFWFRfUkVTRVRfQVJCOworICAgICAgICBpZiAobV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNz
UmVzZXRTdGF0dXNFWFQoKTsKICAgICAgICAgaWYgKHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VS
Uk9SKQogICAgICAgICAgICAgbV9jb250ZXh0UmVzZXRTdGF0dXMgPSByZWFzb25Gb3JSZXNldDsK
ICAgICAgICAgcmV0dXJuIHJlYXNvbkZvclJlc2V0OwpAQCAtMjAyLDcgKzIxMiw5IEBAIGludCBF
eHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBl
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSkKIHsKICAgICBpZiAobV9nbFJlYWRuUGl4
ZWxzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKwogICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3
aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAogICAgICAgICAvLyBhbGwgcHJldmlv
dXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4K
ICAgICAgICAgOjpnbEZsdXNoKCk7CkBAIC0yMTksNyArMjMxLDkgQEAgdm9pZCBFeHRlbnNpb25z
R0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXoKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0NH
THVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBh
cmFtcykKIHsKICAgICBpZiAobV9nbEdldG5Vbmlmb3JtZnZFWFQpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRu
VW5pZm9ybWZ2RVhUKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMjMwLDcgKzI0NCw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBH
Q0dMCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdDR0x1aW50
IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKQog
ewogICAgIGlmIChtX2dsR2V0blVuaWZvcm1pdkVYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgbV9nbEdldG5Vbmlmb3Jt
aXZFWFQocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNDUsNyArMjYxLDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0cKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBtX2dsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBj
b3VudCwgcHJpbWNvdW50KTsKIH0KIApAQCAtMjU2LDcgKzI3NCw5IEBAIHZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6
ZWkgY291bnQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xF
KG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNvdW50KTsKIH0KIApAQCAtMjY3LDcgKzI4Nyw5IEBA
IHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQg
aW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9nbFZlcnRleEF0dHJp
YkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMLmgKaW5kZXggY2U2NTEwOTU1NzEzNDA2MjMyODQzMGNhOTgyZDVkMDYzYTE3ZmFl
NC4uN2RiMTA4NjdmODcwNmI5ODBjNWVkNTMyNzE0ODgxMTA2YWQ1Yzc3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAgLTEwOCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKLSAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgZW51bSBjbGFzcyBSZWxlYXNlQmVoYXZpb3IgewogICAgICAgICBQcmVzZXJ2ZVRocmVhZFJl
c291cmNlcywKQEAgLTUxMyw2ICs1MTIsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRv
dyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRpb246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBudWxscHRyKTsKIAorICAgIC8vIENhbGxlZCBvbmNl
IGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVu
R0wuCisgICAgLy8gQ2FsbGVkIG9uY2UgYnkgYWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9m
IEV4dGVuc2lvbnNHTCB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCisgICAgYm9vbCBtYWtl
Q29udGV4dEN1cnJlbnQoKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAKICAgICAvLyBUYWtlIGludG8g
YWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMs
CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1p
bmUgd2hpY2ggY291bGQgb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFz
ZS5jcHAKaW5kZXggMjBiZjJmNGY5ODRjYzdmMmJiNzNjNmRhNTU5ZjA4MDBhMzNhMTQ5Yy4uNzUw
ZWQzMjZlY2U2NWU4OGY2YjQxMzYwMTVjNGY5MzM3NDQ4OWNhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdM
QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKQEAgLTIzNyw3ICsyMzcsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNv
bnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJi
dWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICNpZiBVU0UoT1BFTkdMKQogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNl
IERFUFRIX1NURU5DSUw6CkBAIC0yNjQsNyArMjY2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogICAg
IC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNvcnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4gdGhl
IG51bWJlciBvZiBjb21wb25lbnRzCiAgICAgLy8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhlIG51
bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3RvciBoYXMgNCBjb21wb25lbnRzKS4KICAgICAvLyBU
aGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRp
dmlkZWQgYnkgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAj
aWYgVVNFKE9QRU5HTCkKICAgICBjYXNlIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CkBA
IC0zMTAsNyArMzE0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBBU1NFUlQocmFu
Z2UpOwogICAgIEFTU0VSVChwcmVjaXNpb24pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAg
ICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpM
T1dfSU5UOgpAQCAtNDAzLDEzICs0MDksMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFy
LCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlcHRo
UmFuZ2Uoek5lYXIsIHpGYXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCkBAIC00MjgsNyArNDM4LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLAogCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2Fs
bHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlv
dXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsKICAgICBBU1NFUlQobV9zdGF0
ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5ib3VuZERyYXdGQk8pOwogICAgIGlmIChhdHRycy5h
bnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERyYXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggYjE0
YjYyZDVlNGZiZWE4ZWEyYzg3ODU2ZTdiZmVkNmI4ZDM4NjdiMi4uOTg0ZjYyZDBiNTRkZDhhOGFl
YTM5N2IwODE3N2ViOGI0NmM5ZmY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0xDb21tb24uY3BwCkBAIC0yMDAsNyArMjAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUoKQogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICNpZiAhVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogICAgIFRlbXBvcmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3Nv
cihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNFKTsKQEAgLTIzOSw3ICsyNDEsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFy
ICpwaXhlbHMsIGludCBwaQogICAgIGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBt
X2N1cnJlbnRIZWlnaHQgKiA0KQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKIAogICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4dEF0
dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKQEAgLTI3Myw5ICsyNzcsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhl
bHMsIGludCBwaQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0wo
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYm
IGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjgzLDEy
ICsyODQsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0g
d2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBUZW1wb3JhcnlPcGVu
R0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC00
MjcsNyArNDMwLDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01h
dGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4U2hhZGVyLCBQbGEKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZShHQ0dMZW51bSB0ZXh0dXJlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwog
ICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1cmUpOwogfQpAQCAtNDM2LDcgKzQ0MSw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VS
VChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJv
bENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0s
IHNoYWRlcik7CiB9CkBAIC00NDQsNyArNDUxLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8K
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBt
YXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVf
QVRUUklCVVRFLCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBp
cyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0Zjgo
KS5kYXRhKCkpOwpAQCAtNDUzLDEzICs0NjEsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgR0x1aW50IGZibzsKICAg
ICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8gPSBidWZmZXI7CkBAIC00NzUsMTAyICs0ODcsMTMz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVu
ZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4
dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIDo6
Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dM
ZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQog
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFj
dG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xC
bGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9ICAgICAgIAogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVt
IGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQs
IHNpemUsIDAsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVm
ZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICA6OmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwg
ZGF0YSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQodGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xv
cihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYgZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBt
YXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhcihtYXNrKTsKICAgICBj
aGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
clN0ZW5jaWwoR0NHTGludCBzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVh
clN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFz
ayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29sZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBH
Q0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29sb3JN
YXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBB
U1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBUdXJuIG9uIG5hbWUg
bWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5HTEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQogICAg
IC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAgdG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRl
eHQuCkBAIC02MzIsNyArNjc1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7
CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgSGFzaE1hcDxQ
bGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKIApAQCAtNjY2LDcgKzcxMCw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9i
amVjdCBzaGFkZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWln
aHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFk
RkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKQEAgLTY4MSw3ICs3MjcsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xpbnQgbGV2ZWwsIEdDRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4
U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNl
dCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0
cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFk
RkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJPKTsKQEAgLTY5NiwxOSArNzQ0LDI1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZh
Y2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ3VsbEZh
Y2UobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhH
Q0dMZW51bSBmdW5jKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aEZ1bmMo
ZnVuYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dM
Ym9vbGVhbiBmbGFnKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aE1hc2so
ZmxhZyk7CiB9CiAKQEAgLTcxNiw4MyArNzcwLDEwOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
TwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJv
Z3JhbSk7CiAgICAgOjpnbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsRGlzYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMo
R0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIDo6Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAg
ICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlw
ZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERy
YXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEVuYWJsZShjYXApOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBp
bmRleCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2go
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGaW5pc2goKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xGbHVzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQs
IEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRl
eHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5h
ZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsRnJvbnRGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTgwMiw3
ICs4ODIsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJ
bXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBHTGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAg
ICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgJm1heEF0dHJpYnV0ZVNpemUpOwogICAgIFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmli
dXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxs
IHRlcm1pbmF0aW9uLgpAQCAtODQ4LDcgKzkzMCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NH
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwog
CkBAIC04OTQsNyArOTc4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBt
YXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwogfQogCkBAIC0xMDM3LDcgKzExMjMsOSBAQCBpbnQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgUwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0x
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1h
cHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFt
ZSk7CiAgICAgTE9HKFdlYkdMLCAiOjpnbEdldEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMg
dG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CkBA
IC0xMDQ5LDE0ICsxMTM3LDE4IEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjCiAgICAgaWYgKCFw
cm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKIAog
ICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29s
IG1vdmVkQW5FcnJvciA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBv
ZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTEwODMsMTkgKzExNzUs
MjUgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAgICAg
ICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0KIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKwogICAgIHJldHVybiA6OmdsR2V0RXJy
b3IoKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NH
TGVudW0gbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4g
U3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEhpbnQo
dGFyZ2V0LCBtb2RlKTsKIH0KIApAQCAtMTEwNCwxMyArMTIwMiwxNyBAQCBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIp
CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKIH0K
IAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51
bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJ
c0VuYWJsZWQoY2FwKTsKIH0KIApAQCAtMTExOSw3ICsxMjIxLDkgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFt
ZWJ1ZmZlcikKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzRnJhbWVi
dWZmZXJFWFQoZnJhbWVidWZmZXIpOwogfQogCkBAIC0xMTI4LDcgKzEyMzIsOSBAQCBHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSkKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHBy
b2dyYW0pOwogfQogCkBAIC0xMTM3LDcgKzEyNDMsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZm
ZQogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVy
RVhUKHJlbmRlcmJ1ZmZlcik7CiB9CiAKQEAgLTExNDYsNyArMTI1NCw5IEBAIEdDR0xib29sZWFu
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
cikKICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwog
fQogCkBAIC0xMTU1LDIwICsxMjY1LDI2IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4
dHVyZSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbExpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBH
Q0dMc2l6ZWkgY291bnQgPSAwOwogICAgIFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsg
fTsKQEAgLTExODIsMjUgKzEyOTgsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dM
ZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29s
ZWFuIGludmVydCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU2FtcGxlQ292ZXJh
Z2UodmFsdWUsIGludmVydCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNj
aXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIApAQCAtMTIwOCw3ICsxMzMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBT
dHJpbmcKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAg
ICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7CiAKQEAgLTEyMTksMTc4ICsxMzQ1LDIzNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIsIGNvbnN0IFN0cmluZwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNr
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFz
aykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShm
YWNlLCBmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVu
dW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFj
ZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6
ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xV
bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJmKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQq
IGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0
IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24s
IHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFy
cmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00
Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25z
dCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZv
cm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NH
TGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQg
djIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50
IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCog
YXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
Q0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xMzk4LDczICsx
NTgwLDk3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4
QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFy
cmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYo
R0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGlu
ZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2
MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBjb25z
dCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0
ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZs
b2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGlu
ZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGlu
dCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkg
c3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZz
ZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xp
bnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVW
ZXJ0ZXhBcnJheSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgYXJyYXkg
PSAwOwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
V0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFy
cmF5KTsKQEAgLTE0NzcsNyArMTY4Myw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJh
eSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmICghVVNF
KE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRG
T1JNKENPQ09BKQogICAgIDo6Z2xEZWxldGVWZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICNlbmRp
ZgpAQCAtMTQ4OCw3ICsxNjk2LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5
KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAgICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5
KGFycmF5KTsKICNlbmRpZgpAQCAtMTQ5Nyw3ICsxNzA3LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgKCFVU0UoT1BFTkdM
X0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09D
T0EpCiAgICAgOjpnbEJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CiAjZWxzZQpAQCAtMTUwNywxOSAr
MTcxOSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXko
UGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUsIEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xl
bnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTUyNyw3ICsxNzQ1LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFt
ZSwgR0NHTHVpbnQgaW5kZXgsIEdDR0wKIHsKICAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwogICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0g
MDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJlZm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmly
c3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wzLmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5n
IHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBPcGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJ
bnRlZ2VyaV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwpAQCAtMTUzNiw3ICsxNzU2LDkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFtZSwg
R0NHTHVpbnQgaW5kZXgsIEdDR0wKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVnZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQ2NCogdmFsdWUpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHBuYW1lKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAg
IC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0
Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdl
YkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAzLjAuCiAgICAgLy8gOjpnbEdldEludGVnZXI2
NHYocG5hbWUsIHZhbHVlKTsKQEAgLTE1NDYsNyArMTc2OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgsIEdDCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5k
ZXgpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUg
MTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRv
IHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRl
eHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1l
LCBpbmRleCwgdmFsdWUpOwpAQCAtMTU1NCw3ICsxNzc4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRl
eCwgR0MKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBh
dHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVOVDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBl
aXRoZXIgd29ya3MuCiAgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsKQEAgLTE1NjIsNyArMTc4OCw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0UHJv
Z3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE1NzIsNyArMTgwMCw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xD
b3VudChQbGF0Zm9ybUdMT2JqZWN0IHByCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFk
ZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmluZChwcm9ncmFtKTsKICAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLmVuZCgpKSB7CiAgICAgICAgICp2YWx1ZSA9
IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBlKHBuYW1lKTsKQEAgLTE2NTAsNyArMTg4MCw5IEBA
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAgICAgOjpnbEdldFBy
b2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogICAgIGlmICgh
bGVuZ3RoKQpAQCAtMTY2OSw3ICsxOTAxLDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQs
IHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2NzcsNyArMTkxMSw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dM
ZW51bSBwbmFtCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
IAogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKICAgICAKQEAgLTE3MTIsNyArMTk0OCw4IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBB
U1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0
IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQpAQCAtMTczOSw3ICsxOTc2LDggQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKQEAgLTE3NTAsMjUgKzE5ODgsMzMgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcmZ2KEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xP
YmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9u
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1p
dihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3Jh
bSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApAQCAtMTc4Myw3ICsyMDI5LDggQEAgR0NHTGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY28KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gLTE7CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3Jh
bSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6
Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRh
KCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CkBAIC0xNzkyLDE5ICsyMDM5LDI0IEBAIEdD
R0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIGNvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0VmVydGV4QXR0cmli
ZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NH
TGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFZlcnRleEF0
dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NH
TGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBHTHZvaWQqIHBvaW50
ZXIgPSAwOwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZw
b2ludGVyKTsKQEAgLTE4MTMsNyArMjA2NSw4IEBAIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICNpZiAhVVNFKE9Q
RU5HTF9FUykKICAgICBpZiAodHlwZSA9PSBIQUxGX0ZMT0FUX09FUykKQEAgLTE4NDQsMjEgKzIw
OTcsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkg
aGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
aW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3Rh
dGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxl
dmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVk
Q291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogUGxhdGZvcm1H
TE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlbkJ1ZmZlcnMoMSwg
Jm8pOwogICAgIHJldHVybiBvOwpAQCAtMTg2Niw3ICsyMTI1LDkgQEAgUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4NzQsMTMgKzIxMzUsMTcgQEAgUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9n
cmFtKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbENyZWF0ZVByb2dy
YW0oKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBv
ID0gMDsKICAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm8pOwogICAgIHJldHVybiBvOwpA
QCAtMTg4OCwxMyArMjE1MywxNyBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIoR0NHTGVudW0gdHlwZSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVO
VF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAK
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUo
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2Vu
VGV4dHVyZXMoMSwgJm8pOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CkBA
IC0xOTAzLDEzICsyMTcyLDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1l
YnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5k
UmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZCTyk7CiAgICAgaWYgKGZyYW1lYnVmZmVyID09
IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVi
dWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVzZWQgZm9yIGRyYXdpbmcKQEAgLTE5MjEsMjYgKzIx
OTQsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIo
UGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHBy
b2dyYW0pOwogICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVu
ZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRlUmVuZGVyYnVm
ZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJl
bW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFsdWUpIHsKICAgICAgICAgcmV0dXJuIGtleVZh
bHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7CiAgICAgfSk7CkBAIC0xOTk2LDcgKzIyNzcsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90
aWZpY2F0aW9uKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERp
cmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRl
eHR1cmUoKSk7CiB9CkBAIC0yMDIxLDcgKzIzMDQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
cwogI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVOQUJMRShXRUJHTDIpCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7
CiB9CiAjZW5kaWYKQEAgLTIwNDcsNyArMjMzMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVP
CiAjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdD
R0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3Jp
dGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXplKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNl
dCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQogI2Vsc2UKQEAgLTIwNjgsMTMgKzIzNTUsMTcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0
YXJnZXQsIEdDR0xpbnRwdHIgc3JjQnkKICNpZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5H
TF9FU18zKQogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdD
R0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdD
R0xiaXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBy
ZXR1cm4gOjpnbE1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7
CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihH
Q0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0
dXJuIDo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQogI2Vsc2UKQEAgLTIxMzksNyArMjQzMCw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3Jj
KQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NH
THNpemVpIGJ1ZlNpemUsIEdDR0xpbnQqIHBhcmFtcykKIHsKICNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwg
aW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKQEAgLTIxNTIsMjAgKzI0NDUsMjYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGludGUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIGxldmVscywgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRC
b3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0
b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBk
ZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1f
c3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkp
OwogfQpAQCAtMjYzMCw3ICsyOTI5LDggQEAgVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm8KIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdDR0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xl
bnVtIHBuYW1lLCBWZWN0b3I8R0NHTGludD4mIHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJv
Z3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1l
LCBwYXJhbXMuZGF0YSgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVT
LmNwcAppbmRleCA5Mzg5NWU1NmIwYzVhNWJkODRjYjBhYTQ5ODY4MjBhYTY3MTE0ODE1Li42MGZk
ZmM2NWY4NzM5NTg5NTc5NWE4NGVmMWUwOWFiZjZkN2FhODQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xF
Uy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCkBAIC00Miw3ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51
bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAKICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogCkBAIC0x
ODgsMTMgKzE5MCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmKQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUp
OwogfQogCkBAIC0yMDMsNyArMjA5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBB
U1NFUlQocmFuZ2UpOwogICAgIEFTU0VSVChwcmVjaXNpb24pOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNp
b25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKIH0KIApAQCAtMjMyLDEzICsyNDAsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dM
Y2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlcHRoUmFuZ2Vm
KHpOZWFyLCB6RmFyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJE
ZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xD
bGVhckRlcHRoZihkZXB0aCk7CiB9CiAKQEAgLTI3OCw3ICsyOTAsOSBAQCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dAogICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0xQcml2YXRlPih0aGlzLCBkZXN0aW5hdGlvbikpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChz
aGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4dCk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
CiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRy
aWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAg
LTM0Myw3ICszNTcsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogCiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICBhdXRv
IGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBjMGEyZWNiODc0N2MxMThmMDcwNWRm
OTE4OThkNDQ5ODJlOTBmMmE3Li44OWQxNGQyOTU2YjcyZmE0MmVlOTgzNjJhYjgwZDJiYjMwYWIz
ZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cApAQCAtMTM5LDcgKzEzOSw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAjZWxzZQogICAg
IG1fdGV4bWFwTGF5ZXIgPSBXVEY6Om1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9y
bUxheWVyPigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlmCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygp
OwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZl
IGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0yMTMsNyArMjE0LDggQEAgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdM
QXR0cmlidXRlcyBhdHQKICAgICBtX3RleG1hcExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFw
cGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlzLCBkZXN0aW5hdGlvbik7CiAjZW5kaWYKIAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAKICAgICB2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsg
Ly8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxpZGF0aW9uLgpAQCAtMzMzLDcgKzMz
NSw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAjaWYgVVNFKEFOR0xFKQogR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKICAgICBpZiAobV90ZXh0dXJl
KQogICAgICAgICBnbDo6RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQpAQCAtMzc3LDcgKzM4MCw4IEBAIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogI2Vsc2UKIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAg
ICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413807</attachid>
            <date>2020-11-11 03:36:23 -0800</date>
            <delta_ts>2020-11-12 23:53:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218178-20201111133620.patch</filename>
            <type>text/plain</type>
            <size>201141</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWRhN2VlYTJlZWYxYmNi
Y2FhZDIxYzQ4YzAyOWYxYTQ2MTU5YzYwOC4uZGE3NzcwMWY1YTNkNTQ1Y2FiNjVlNDE5MjEwZjY1
Mzk0YjZlYmIxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0yOCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1c2Vz
IG9mIE1ha2VDdXJyZW50IGZyb20gV2ViR0wgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODE3OAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzA3MTQ1NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgor
CisgICAgICAgIFdvcmsgdG93YXJkcyBXZWJHTCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjb25jcmV0ZSBjbGFzcy4KKworICAgICAg
ICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKSB0bwor
ICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBj
YWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFsbCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQg
bWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNl
cyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBDaGVjayBhbGwgcmV0dXJuIHZhbHVlcyBv
ZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAgICAgc2hvdWxkIG5vdCBjYWxsIGludG8g
T3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJyZW50LAorICAgICAgICBhcyB0aGF0IGNh
biBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3IgaW5jb3JyZWN0IHJlc3VsdHMuCisgICAg
ICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90
IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5l
ci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhl
IG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGlu
dG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAg
ICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVt
ZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRpcmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlv
bnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAgICAgdGhyb3VnaCBnZXRFeHRlbnNpb25z
KCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBjb2RlCisgICAgICAgIGluc2lk
ZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8K
KyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4gVGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24g
YmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dM
LCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJhY3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1
cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQgdG8KKyAgICAgICAgdHdvLiBUaGlzIGlz
IHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwKKyAgICAg
ICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBpbiB0aGlzIHJlZ2FyZC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVydGV4QXR0cmliMCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhB
cnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJh
d0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdB
cnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RmxvYXR2Um9idXN0QU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTNEUm9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRl
eEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJpX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSXVpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmk2NHZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyUGFyYW1l
dGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRl
eExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVu
aWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlckl1aXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxl
clBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFj
aGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBh
cmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFy
YW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4
UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJs
b2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRl
U3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1
ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRy
YW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5H
TC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6Omlz
VmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxp
ZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZv
TG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTAtMjggIEtpbW1vIEtpbm51bmVuICA8a2tp
bm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBWaWRlb1RleHR1cmVDb3BpZXIg
dG8gYmUgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIEdyYXBoaWNzQ29udGV4dEdMIGFuZCBwb2x5
bW9ycGhpYyB0byBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMTdjZDc1NTllOWYzNmQ5YTViNTI3
ZTQ0M2VmOTAzMDE5MTFlZTJmLi45YTg3NjkzZGExNzk5OGY3YTZiMjgyZGFiZmQxZDcxZmVjN2I1
NjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
cmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsKLSAgICBpZiAoIWNvbnRleHQg
fHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgaWYgKCFjb250ZXh0KSB7
CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgICAgICBjYW52YXNFbGVtZW50
LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndl
YmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAgICAgICAgICBFdmVudDo6Q2Fu
QnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAiQ291bGQgbm90IGNyZWF0ZSBh
IFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEwIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNp
emVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNlQWRkcmVzcygpOwogCiAjaWYg
VVNFKEFOR0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBjb2x1bW5zLCByb3dzOwotICAg
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xFKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwgJmxlbmd0aCwgJmNvbHVtbnMs
ICZyb3dzLCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxlbmd0aCA9IDA7CisgICAgR0NH
THNpemVpIGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dzID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xFKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwgJmxlbmd0aCwgJmNvbHVt
bnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlmIChtX2lzUm9idXN0bmVzc0VY
VFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkucmVhZG5QaXhl
bHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMuYnl0ZUxlbmd0
aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA0YjRkZmJiM2Y3M2M1ZjJk
MjdiZjE3ZjkyNTU5YTZmODdhYzU1ZDJiLi4xM2ZhZjVkYjY0ZmZiMjg2YmU2YWQ5NTc5NTA5NWZj
YzkzZjMzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
bmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC03NCw5ICs3NCwxMSBAQCBF
eHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkgPSBkZWZhdWx0OwogCiBib29s
IEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAg
aWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICBpZiAoIW1faW5pdGlh
bGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaW5p
dGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0KICAgICByZXR1cm4gc3VwcG9y
dHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDggQEAgdm9pZCBFeHRlbnNpb25z
R0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgLy8gRW5h
YmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpLgogICAgIGlmICht
X3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAmJiAhbV9lbmFibGVkRXh0ZW5z
aW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0RXh0ZW5zaW9uQU5HTEUobmFt
ZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuYWRkKG5hbWUp
OwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIGludCBzb3Vy
Y2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9UUkFO
U0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNlTGVuZ3RoKTsKICAgICBp
ZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBAIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwgR0NHTHNpemVpLCBpbnQgKikK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25n
IHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBs
b25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcg
ZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgQVBQ
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdMRShzcmNYMCwgc3JjWTAs
IHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25l
ZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0
IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsK
ICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAgICAgcmV0dXJuIGFycmF5
OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRlbGV0ZVZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKIH0KIApAQCAtMTkzLDEz
ICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmpl
Y3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCkBAIC0yMjgsMjUgKzI0NSwz
MyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdCdWZmZXJzRVhUKEdDR0xz
aXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1v
ZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQ0dMZW51
bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3Vu
dCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
b2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnZlcnRl
eEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBAIC0yNzEsOTcgKzI5NiwxMjkg
QEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5h
bEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xFX3JvYnVzdF9jbGllbnRfbWVt
b3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFudlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xib29s
ZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBk
YXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZS
b2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1ZmZlclBhcmFtZXRl
cml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZSb2J1c3RBTkdMRShHQ0dMZW51
bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMZmxvYXQg
KmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBkYXRhKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Um9idXN0QU5H
TEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VydlJvYnVzdEFOR0xFKEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQg
KmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIGRhdGEp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFtaXZSb2J1c3RBTkdMRShH
Q0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtaXZSb2J1c3RBTkdMRShwcm9n
cmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdM
RSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2hhZGVyLCBH
Q0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dM
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRlciwgcG5hbWUsIGJ1ZlNpemUs
IGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFy
YW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4
UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBh
cmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlcml2Um9i
dXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNp
emUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJpdlJv
YnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQg
cHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0QU5HTEUocHJvZ3JhbSwgbG9j
YXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFt
cykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5n
dGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJp
YmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0
cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliaXZSb2J1c3RBTkdM
RShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dM
c2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmliaXZSb2J1c3RBTkdM
RShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZSb2J1c3RBTkdMRShHQ0dMdWlu
dCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxl
bmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydlJvYnVzdEFOR0xFKGlu
ZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBpbnQgeSwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHNpemVpICpjb2x1bW5z
LCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhlbHNSb2J1c3RBTkdMRSh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIGxlbmd0aCwgY29sdW1ucywg
cm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2OCBAQCB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2
ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lzRm9yV2ViR0wyKQogICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIGJ1
ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFBhcmFtZXRl
cmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdM
RSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVu
dW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJh
bWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiB9CiAK
IHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRSb2J1c3RBTkdMRShHQ0dMZW51
bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFN1YkltYWdlMkRSb2J1c3RB
TkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2
ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xzaXplaSBidWZTaXpl
LCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUs
IGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQg
eG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNp
emUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpjb21wcmVz
c2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdDR0xzaXpl
aSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlM0RSb2J1c3RBTkdM
RSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJv
cmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQs
IGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQgem9mZnNldCwgR0NHTHNp
emVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIEdDR0xlbnVtIGZv
cm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQq
IGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGlt
YWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVsLCBpbnQgaW50
ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTHNpemVp
IGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIEdDR0xz
aXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFnZTNEUm9idXN0QU5HTEUodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50IGxldmVs
LCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4U3ViSW1h
Z2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZSb2J1c3RBTkdMRShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICps
ZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1l
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCdWZmZXJQb2ludGVydlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1ZmZlclBvaW50ZXJ2Um9i
dXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFOR0xFKHRhcmdldCwgaW5kZXgs
IGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6Omdl
dEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1hdGl2Um9idXN0QU5HTEUo
dGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSWl2Um9idXN0QU5H
TEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0dHJpYklpdlJvYnVzdEFO
R0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQg
aW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2Um9idXN0QU5HTEUoaW5kZXgs
IHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9j
YXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBh
cmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2NhdGlvbiwgYnVmU2l6ZSwg
bGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dyYW0sIEdDR0x1aW50IHVuaWZv
cm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFO
R0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyNjR2Um9idXN0
QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0
aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFOR0xFKHBuYW1lLCBidWZTaXpl
LCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3Ro
LCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4
LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRhdGEpKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaTY0dlJvYnVzdEFO
R0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBH
Q0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2
Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCByZWludGVycHJldF9j
YXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6c2Ft
cGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5h
bWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0
ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1
aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NH
TGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1l
LCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBs
ZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQog
ewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0
U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGcmFtZWJ1
ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9n
cmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwcm9n
cmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdM
RShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFuaV92Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xlYW5pX3ZSb2J1c3RBTkdM
RSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVu
c2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUs
IEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKHBuYW1lLCBpbmRleCwgYnVm
U2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhM
ZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xp
bnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVs
LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQYXJhbWV0ZXJmdlJvYnVzdEFO
R0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAK
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFO
R0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9idXN0QU5HTEUocG5hbWUsIGJ1
ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcgKzcwNCw5IEBAIHN0YXRpYyB2
b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5z
aWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlYWRuUGl4ZWxzUm9i
dXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQs
IEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xz
aXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xzaXplaSAqcm93cywgdm9pZCAq
ZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdv
IGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAv
LyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFk
aW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4NiArNzQxLDExNCBAQCB2b2lk
IEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9y
bWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkg
YnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1m
dlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZSb2J1c3RBTkdMRShH
Q0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dy
YW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwg
aW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1
aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBi
dWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRl
eFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJaXZS
b2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4
dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0x1aW50ICpw
YXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwg
cGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVySWl2
Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJJ
aXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdM
RShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJhbWV0ZXJJdWl2Um9idXN0
QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lk
IEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dM
aW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwg
YnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFy
YW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFtKQogewotICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2FtcGxlclBhcmFtZXRlckl1
aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lk
IEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NH
THVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcklpdlJvYnVzdEFO
R0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQg
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUoR0NH
THVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6
ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2Um9idXN0
QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2Um9idXN0QU5HTEUoR0NHTHVp
bnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5n
dGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRShpZCwgcG5hbWUs
IGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQ2NCAqcGFyYW1z
KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1
aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdMRShpZCwgcG5hbWUsIGJ1
ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2NCo+KHBhcmFtcykpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hbmdsZS9HcmFw
aGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IDRjMjI0MjIxNTgxNzY2YTdj
NGFlN2E2ZTY3ZjdjZTZlNGJhZjFlYWIuLmYyNTlhY2I4YjgxYTkzMzliZmIzMjE1MmM3ZjM3OWMz
YTUzZDZmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Fu
Z2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCkBAIC0xODUsMTEg
KzE4NSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlRkJPcyhjb25z
dCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDQs
IG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpCaW5kUmVuZGVyYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgZ2V0RXh0
ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTF9SRU5ERVJCVUZGRVIs
IHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5HTEUoR0xfUkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5kZXB0aCkgewogICAgICAg
ICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4dGVuc2lvbnMoKS5yZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMX1JFTkRFUkJVRkZFUiwgc2Ft
cGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQgY29tYmluZWQgZGVwdGgv
c3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBoYXZlIHRvIGJlIGF0dGFjaGVk
IHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UIHBvaW50LgogICAgICAg
ICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjQsMTMgKzMyNCwxNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5
KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5k
ZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50
ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1BWF9URVhUVVJFX1NJWkU6CiAg
ICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpFLCB2YWx1ZSk7CkBAIC0zNjMs
MTMgKzM2NywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VydihH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dM
aW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlf
dihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRlclR5cGUsIEdDR0xlbnVt
IHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50KiBwcmVjaXNpb24pCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFk
ZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsKIH0KIApAQCAtMzg2LDEz
ICszOTQsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRoUmFuZ2VmKHN0YXRpY19jYXN0
PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0aCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGRlcHRoKSk7CiB9CiAKQEAgLTQwNyw3ICs0MTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgs
CiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUg
ZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5n
IGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJp
YnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIg
PyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdM
OjpGUkFNRUJVRkZFUjsKQEAgLTUyMiw3ICs1MzYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBwcmVwYXJlVGV4dHVyZUlt
cGwoKTsKIH0KIApAQCAtNTcyLDcgKzU4OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpCiAg
ICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgR0NHTGVudW0g
ZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJF
QURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTYy
OCw5ICs2NDYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5n
UmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBpZiAo
IXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYg
KHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjM4LDEzICs2NTMsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogdGhpcyB3aWxs
IGNhbGwgbWFrZUN1cnJlbnRDb250ZXh0IGFnYWluLCB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3Jl
IGNoYW5naW5nIHRoZSBzaXplLgorICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OworCiAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdp
ZHRoOwogICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwogICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwogCiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNz
b3IoR0xfU0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC02NjYsMTEgKzY4NSwxMiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkK
ICAgICBnbDo6Q29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwog
ICAgIGlmIChhdHRycy5kZXB0aCkgewogICAgICAgICBnbDo6R2V0RmxvYXR2KEdMX0RFUFRIX0NM
RUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpjbGVhckRlcHRoKDEpOworICAgICAgICBnbDo6Q2xlYXJEZXB0aGYoMS4wZik7CiAgICAgICAg
IGdsOjpHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOwogICAgICAg
ICBnbDo6RGVwdGhNYXNrKEdMX1RSVUUpOwogICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhf
QlVGRkVSX0JJVDsKICAgICB9CisKICAgICBpZiAoYXR0cnMuc3RlbmNpbCkgewogICAgICAgICBn
bDo6R2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CiAg
ICAgICAgIGdsOjpDbGVhclN0ZW5jaWwoMCk7CkBAIC02ODYsNyArNzA2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAg
Z2w6OkNsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsy
XSwgY2xlYXJDb2xvclszXSk7CiAgICAgZ2w6OkNvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9y
TWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwogICAgIGlmIChhdHRycy5kZXB0
aCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChjbGVhckRl
cHRoKTsKKyAgICAgICAgZ2w6OkNsZWFyRGVwdGhmKGNsZWFyRGVwdGgpOwogICAgICAgICBnbDo6
RGVwdGhNYXNrKGRlcHRoTWFzayk7CiAgICAgfQogICAgIGlmIChhdHRycy5zdGVuY2lsKSB7CkBA
IC03MTMsNyArNzMzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFj
dGl2ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKICAgICBnbDo6QWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKIH0KQEAgLTcyMiwyNiArNzQ0LDM0IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRm
b3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpBdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVyKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1H
TE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgR0x1aW50IGZibzsK
ICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8gPSBidWZmZXI7CkBAIC03NjAsMTA3ICs3OTAs
MTQxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
cmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kUmVuZGVy
YnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
dGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4
dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIGds
OjpCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xjbGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBH
Q0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYgYWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dM
ZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2RlQWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQog
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFj
dG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpC
bGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuY1NlcGFyYXRlKEdDR0xlbnVtIHNyY1JHQiwgR0NHTGVudW0gZHN0UkdC
LCBHQ0dMZW51bSBzcmNBbHBoYSwgR0NHTGVudW0gZHN0QWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBo
YSwgZHN0QWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJE
YXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIEdDR0xlbnVtIHVzYWdlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCdWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwg
MCwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdD
R0xlbnVtIHVzYWdlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCdWZmZXJEYXRh
KHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpidWZmZXJTdWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQs
IEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXplLCBkYXRhKTsK
IH0KIAogdm9pZCogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xi
aXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1
cm4gZ2w6Ok1hcEJ1ZmZlclJhbmdlKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CiB9
CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQ0dM
ZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJu
IGdsOjpVbm1hcEJ1ZmZlcih0YXJnZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb3B5QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0
ZVRhcmdldCwgR0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBH
Q0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29weUJ1
ZmZlclN1YkRhdGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zm
c2V0LCBzaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJu
YWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQqIHBhcmFtcykKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAtODY4LDQ2ICs5MzIsNjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3RvcmFnZTNEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTHNpemVpIGxldmVscywgR0MKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdD
R0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lLCBWZWN0b3I8R0NHTGludD4m
IHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAK
ICAgICBnbDo6R2V0QWN0aXZlVW5pZm9ybXNpdihwcm9ncmFtLCB1bmlmb3JtSW5kaWNlcy5zaXpl
KCksIHVuaWZvcm1JbmRpY2VzLmRhdGEoKSwgcG5hbWUsIHBhcmFtcy5kYXRhKCkpOwogfQogCiBH
Q0dMZW51bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
Q0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9O
OworCiAgICAgcmV0dXJuIGdsOjpDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBH
Q0dMY2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6Q2xlYXIobWFzayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQg
cykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJTdGVuY2lsKHMpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVk
LCBHQ0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbG9yTWFzayhyZWQsIGdyZWVuLCBi
bHVlLCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gV2UgbmVlZCB0aGUgQU5HTEVfdGV4dHVyZV9yZWN0
YW5nbGUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSU9TdXJmYWNlCiAgICAgLy8gYmFja2J1ZmZlcnMs
IGJ1dCB3ZSBkb24ndCB3YW50IGl0IGV4cG9zZWQgdG8gV2ViR0wgdXNlciBzaGFkZXJzLgogICAg
IC8vIFRlbXBvcmFyaWx5IGRpc2FibGUgaXQgZHVyaW5nIHNoYWRlciBjb21waWxhdGlvbi4KQEAg
LTkxOSwxMyArOTk3LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVT
aGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAg
IEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21waWxlU2hh
ZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8g
YXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIEdDR0xlbnVtIGZyYW1lYnVmZmVyVGFy
Z2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVS
IDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSOwogCkBAIC05NDAsNyArMTAyMiw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludCBsZXZlbCwgR0NHCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvcHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGlu
dCB4b2Zmc2V0LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
YXV0byBhdHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZm
ZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVC
VUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTk1NSwxOSArMTAz
OSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChH
Q0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC05NzUsODIgKzEwNjUsMTA4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dy
YW0sIFBsYXRmb3JtR0xPCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFk
ZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZXRhY2hTaGFkZXIocHJvZ3JhbSwg
c2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZShHQ0dM
ZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRpc2FibGUoY2FwKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXpl
aSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd0FycmF5cyhtb2Rl
LCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkg
Y291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG9mZnNldCkpKTsKICAgICBj
aGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFi
bGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpFbmFibGUo
Y2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmlu
aXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZsdXNoKCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSB0
ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwgR0NHTGludCBsZXZlbCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6RnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBh
dHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKICAgICBtX3N0YXRlLnRleHR1
cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyb250RmFjZShtb2RlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVNaXBtYXAoR0NHTGVudW0gdGFyZ2V0KQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwog
fQogCkBAIC0xMDYwLDcgKzExNzYsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTAogICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBHTGludCBtYXhBdHRyaWJ1
dGVTaXplID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwogICAgIFZlY3RvcjxHTGNoYXI+
IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgpAQCAtMTA4OSw3ICsxMjA3LDkgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0cKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKICAgICBn
bDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZt
YXhVbmlmb3JtU2l6ZSk7CiAKQEAgLTExMTgsNyArMTIzOCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBdHRhY2hl
ZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIApAQCAtMTEy
Nyw3ICsxMjQ5LDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFMKICAgICBpZiAoIXByb2dyYW0p
CiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogCiAgICAgcmV0
dXJuIGdsOjpHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
fQpAQCAtMTEzOSw3ICsxMjYzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRB
dHRyaWJMb2NhdGlvbkRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGMKIAogYm9vbCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29sIG1vdmVkQW5FcnJvciA9IGZh
bHNlOwogCiAgICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9p
ZCBjcmVhdGluZyBhIGhhbmcgaWYKQEAgLTExNjYsMTkgKzEyOTIsMjUgQEAgR0NHTGVudW0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAgICAgICAgcmV0dXJuIG1fc3ludGhl
dGljRXJyb3JzLnRha2VGaXJzdCgpOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZB
TElEX09QRVJBVElPTjsKKwogICAgIHJldHVybiBnbDo6R2V0RXJyb3IoKTsKIH0KIAogU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGdsOjpHZXRTdHJpbmcobmFtZSkpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkhpbnQodGFyZ2V0LCBtb2RlKTsKIH0K
IApAQCAtMTE4NywxMyArMTMxOSwxNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KwogICAgIHJldHVybiBnbDo6SXNCdWZmZXIoYnVmZmVyKTsKIH0KIAogR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0VuYWJsZWQoY2FwKTsKIH0K
IApAQCAtMTIwMiw3ICsxMzM4LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBpZiAo
IWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIp
OwogfQogCkBAIC0xMjExLDcgKzEzNDksOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBpZiAoIXBy
b2dyYW0pCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9G
QUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xMjIw
LDcgKzEzNjAsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5k
ZXJidWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIGlmICghcmVuZGVyYnVm
ZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gZ2w6OklzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAK
QEAgLTEyMjksNyArMTM3MSw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBpZiAoIXNoYWRlcikKICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAg
ICAgcmV0dXJuIGdsOjpJc1NoYWRlcihzaGFkZXIpOwogfQogCkBAIC0xMjM4LDQ0ICsxMzgyLDU4
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZv
cm1HTE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJ
c1RleHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxp
bmVXaWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkxpbmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omxp
bmtQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3Jh
bSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkxpbmtQcm9ncmFtKHByb2dyYW0pOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShHQ0dMZW51bSBw
bmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UGl4
ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5pdHMpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKEdDR0xj
bGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6U2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMTI4Myw3ICsxNDQxLDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xP
YmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IENTdHJpbmcmIHNoYWRlclNvdXJjZUNTdHJpbmcg
PSBzdHJpbmcudXRmOCgpOwogICAgIGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZVB0ciA9IHNoYWRl
clNvdXJjZUNTdHJpbmcuZGF0YSgpOwpAQCAtMTI5MywxNzggKzE0NTIsMjM0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRl
ciwgY29uc3QgU3RyaW5nCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxG
dW5jKEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDR0xl
bnVtIGZhY2UsIEdDR0xlbnVtIGZ1bmMsIEdDR0xpbnQgcmVmLCBHQ0dMdWludCBtYXNrKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1
bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5j
aWxNYXNrKEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlN0
ZW5jaWxNYXNrKG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVu
Y2lsTWFza1NlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcChHQ0dMZW51bSBmYWls
LCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dM
ZW51bSBmYWlsLCBHQ0dMZW51bSB6ZmFpbCwgR0NHTGVudW0genBhc3MpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6
cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHZh
bHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyaShH
Q0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50IHZhbHVlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdD
R0xmbG9hdCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0x
ZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybTJmKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0
IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmYobG9jYXRpb24s
IHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkp
CiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFy
cmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmKEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYx
LCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYoR0NH
TGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7
CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIGFycmF5
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmKEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xm
bG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRmKGxvY2F0
aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm00ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xm
bG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlVuaWZvcm0xaShsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwg
R0NHTGludCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJpKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBh
cnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
Mi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6
ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2ko
R0NHTGludCBsb2NhdGlvbiwgR0NHTGludCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MikKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTNpKGxvY2F0aW9uLCB2MCwgdjEs
IHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7CiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIsIEdDR0xpbnQgdjMpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00aShsb2NhdGlvbiwgdjAsIHYx
LCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkK
IHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTRpdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0
byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBzaXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9h
dCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDkuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgzZnYobG9j
YXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBz
aXplLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogYXJyYXkpCiB7CiAg
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2LgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXNl
UHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlVzZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKQEAgLTE0NzIsNzkgKzE2ODcsMTA1
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdD
R0xmbG9hdCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmli
MWYoaW5kZXgsIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliMWZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWIyZihpbmRleCwgdjAsIHYxKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpW
ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliM2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NH
TGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dM
ZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRy
aWIzZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmVydGV4QXR0cmliNGYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYx
LCBHQ0dMZmxvYXQgdjIsIEdDR0xmbG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpW
ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6dmVydGV4QXR0cmliUG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXpl
LCBHQ0dMZW51bSB0eXBlLCBHQ0dMYm9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRl
LCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVy
dGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYklQb2ludGVy
KEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHNpemUsIEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBz
dHJpZGUsIEdDR0xpbnRwdHIgb2Zmc2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpWZXJ0ZXhBdHRyaWJJUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGlu
dCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgYXJyYXkgPSAwOwogICAgIGds
OjpHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICAgICByZXR1cm4gYXJyYXk7CkBAIC0xNTU0
LDcgKzE3OTUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAgIGlmICghYXJyYXkpCiAgICAgICAg
IHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlVmVydGV4QXJyYXlz
KDEsICZhcnJheSk7CiB9CiAKQEAgLTE1NjIsNTEgKzE4MDUsNjcgQEAgR0NHTGJvb2xlYW4gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJh
eSkKIHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5KGFycmF5
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJp
bmRWZXJ0ZXhBcnJheShhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldEJvb2xlYW52KEdDR0xlbnVtIHBuYW1lLCBHQ0dMYm9vbGVhbiogdmFsdWUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDR0xl
bnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dM
ZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAgICAgCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50NjQqIHZh
bHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgZ2w6Okdl
dEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZWdlcjY0aV92KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0NH
TGludDY0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwog
ICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3YocG5hbWUsIGluZGV4LCB2YWx1ZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhdHRhY2ht
ZW50ID09IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKICAgICAgICAgYXR0YWNobWVudCA9IERF
UFRIX0FUVEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgog
ICAgIGdsOjpHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFj
aG1lbnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xNjE0LDcgKzE4NzMsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dM
ZW51bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBw
bmFtZSwgdmFsdWUpOwogfQogCkBAIC0xNjQyLDcgKzE5MDMsOSBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisKICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwg
R0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2NjEs
NyArMTkyNCw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUlu
Zm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQog
CkBAIC0xNjY5LDcgKzE5MzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbQogewogICAgIEFT
U0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlcml2
KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTY3Nyw3ICsxOTQ0LDkgQEAgU3RyaW5n
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtR0xPYmpl
Y3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICBnbDo6R2V0U2hhZGVyaXYoc2hh
ZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAt
MTY5OCwzMSArMTk2Nyw0MSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNo
YWRlclNvdXJjZShQbGF0Zm9ybUdMT2JqZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBH
Q0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQ
YXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xpbnQgbG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm11aXYo
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMdWludCogdmFs
dWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXYocHJvZ3Jh
bSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApAQCAtMTczMCwyNSArMjAwOSwzMiBAQCBHQ0dMaW50
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBjbwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAtMTsKKwogICAgIHJldHVybiBnbDo6R2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5h
bWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0cmli
ZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NH
TGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0
dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NH
TGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBHTHZvaWQqIHBvaW50
ZXIgPSAwOwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZw
b2ludGVyKTsKQEAgLTE3NTcsNyArMjA0Myw4IEBAIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhN
RTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxp
bmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUu
CiAgICAgZ2w6OlRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwpAQCAtMTc2NiwyMSArMjA1MywyNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludCBsZXZlbCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21wcmVzc2VkVGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdD
R0xpbnQgYm9yZGVyLCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbWFnZVNpemUs
IGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50
Qm91bmRUZXh0dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xp
bnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5CdWZmZXJzKDEsICZvKTsKICAg
ICByZXR1cm4gbzsKQEAgLTE3ODgsNyArMjA4MSw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbDo6R2VuRnJhbWVidWZmZXJzKDEs
ICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE3OTYsMTMgKzIwOTEsMTcgQEAgUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBnbDo6Q3JlYXRlUHJvZ3JhbSgpOwog
fQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwog
ICAgIGdsOjpHZW5SZW5kZXJidWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4MTAs
MTMgKzIxMDksMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFE
RVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAKIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsOjpHZW5UZXh0
dXJlcygxLCAmbyk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChvKTsKQEAgLTE4
MjUsMTMgKzIxMjgsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlVGV4dHVyZSgpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZUJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6RGVsZXRlQnVmZmVycygxLCAmYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1
ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1l
YnVmZmVyIGlzIG5vdCBnb2luZyB0byBiZSB1c2VkIGZvciBkcmF3aW5nCiAgICAgLy8gb3BlcmF0
aW9ucyBhZnRlciBpdCBnZXRzIGRlbGV0ZWQuCiAgICAgaWYgKG1faXNGb3JXZWJHTDIpIHsKQEAg
LTE4NDYsMjUgKzIxNTMsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
RnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0p
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQ
bGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6RGVsZXRlUmVuZGVyYnVmZmVycygxLCAmcmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVTaGFkZXIoc2hhZGVy
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVGV4dHVyZShQbGF0
Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0
ZS5ib3VuZFRleHR1cmVNYXAucmVtb3ZlSWYoW3RleHR1cmVdIChhdXRvJiBrZXlWYWx1ZSkgewog
ICAgICAgICByZXR1cm4ga2V5VmFsdWUudmFsdWUuZmlyc3QgPT0gdGV4dHVyZTsKICAgICB9KTsK
QEAgLTE5MjAsNyArMjIzNSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc3Bh
dGNoQ29udGV4dENoYW5nZWROb3RpZmljYXRpb24oKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdo
dCwgR0NHTGludCBib3JkZXIsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghbV9pc0Zvcldl
YkdMMiAmJiBtX2V4dGVuc2lvbnMpCiAgICAgICAgIGludGVybmFsZm9ybWF0ID0gbV9leHRlbnNp
b25zLT5hZGp1c3RXZWJHTDFUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSk7CiAgICAgZ2w6OlRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwpAQCAt
MTkyOSwzNCArMjI0Niw0NSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhJbWFn
ZTJERGlyZWN0KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgRwogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNpemVpIHByaW1jb3VudCkKIHsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
bV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmly
c3QsIGNvdW50LCBwcmltY291bnQpOwogICAgIGVsc2UKLSAgICAgICAgZ2V0RXh0ZW5zaW9ucygp
LmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAg
ICAgICBnbDo6RHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJp
bWNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVp
IGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpIHByaW1j
b3VudCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBpZiAobV9pc0ZvcldlYkdMMikKICAgICAgICAgZ2w6OkRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSwg
cHJpbWNvdW50KTsKICAgICBlbHNlCi0gICAgICAgIGdldEV4dGVuc2lvbnMoKS5kcmF3RWxlbWVu
dHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgcHJpbWNvdW50KTsKKyAgICAg
ICAgZ2w6OkRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpLCBwcmltY291bnQpOwogICAgIGNoZWNrR1BVU3Rh
dHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkRp
dmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiB7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1faXNGb3JXZWJH
TDIpCiAgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAg
ICBlbHNlCi0gICAgICAgIGdldEV4dGVuc2lvbnMoKS52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4
LCBkaXZpc29yKTsKKyAgICAgICAgZ2w6OlZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwg
ZGl2aXNvcik7CiB9CiAKIEdDR0x1aW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtQmxvY2tJbmRleChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgdW5p
Zm9ybUJsb2NrTmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfSU5ERVg7CisKICAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1CbG9ja0luZGV4
KHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKQEAgLTE5NzMs
NyArMjMwMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja2l2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwKIFN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHBy
b2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KQogewogICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBHTGludCBtYXhMZW5ndGggPSAw
OwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tf
TUFYX05BTUVfTEVOR1RILCAmbWF4TGVuZ3RoKTsKICAgICBpZiAobWF4TGVuZ3RoIDw9IDApIHsK
QEAgLTE5OTEsNyArMjMyMSw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtQmxvY2tCaW5kaW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdDR0x1aW50IHVuaWZvcm1CbG9j
a0JpbmRpbmcpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtQmxvY2tCaW5kaW5nKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1
bmlmb3JtQmxvY2tCaW5kaW5nKTsKIH0KIApAQCAtMTk5OSw3ICsyMzMxLDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0wKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlUXVlcnkoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG5h
bWUgPSAwOwogICAgIGdsOjpHZW5RdWVyaWVzKDEsICZuYW1lKTsKICAgICByZXR1cm4gbmFtZTsK
QEAgLTIwMDcsMTkgKzIzNDEsMjUgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y3JlYXRlUXVlcnkoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
ZWdpblF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmVnaW5RdWVyeSh0YXJnZXQsIHF1ZXJ5KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kUXVlcnkoR0NHTGVudW0gdGFyZ2V0
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpFbmRRdWVyeSh0YXJnZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRRdWVyeU9iamVjdHVpdihHQ0dMdWlu
dCBpZCwgR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50KiBwYXJhbXMpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWl2KGlkLCBwbmFtZSwgcGFyYW1zKTsKIH0K
IApAQCAtMjAyNyw3ICsyMzY3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
UXVlcnlPYmplY3R1aXYoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0cKIAogUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJh
Y2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAg
IGdsOjpHZW5UcmFuc2Zvcm1GZWVkYmFja3MoMSwgJm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpA
QCAtMjAzNSw0OSArMjM3Nyw2NCBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKFBsYXRmb3JtR0xPYmplY3QgdHJhbnNm
b3JtRmVlZGJhY2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVRyYW5z
Zm9ybUZlZWRiYWNrcygxLCAmdHJhbnNmb3JtRmVlZGJhY2spOwogfQogCiBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2Jq
ZWN0IHRyYW5zZm9ybUZlZWRiYWNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwog
ICAgIHJldHVybiBnbDo6SXNUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdHJhbnNmb3JtRmVlZGJhY2spCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRUcmFuc2Zvcm1GZWVkYmFjayh0YXJnZXQs
IHRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHQ0dMZW51bSBwcmltaXRpdmVNb2RlKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpCZWdpblRyYW5zZm9ybUZlZWRiYWNrKHByaW1pdGl2ZU1v
ZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVk
YmFjaygpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkVuZFRyYW5zZm9ybUZlZWRi
YWNrKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3MoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgdmFyeWluZ3MsIEdDR0xlbnVtIGJ1ZmZlck1vZGUpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVmVjdG9yPENTdHJpbmc+IGNvbnZl
cnRlZFZhcnlpbmdzID0gdmFyeWluZ3MubWFwKFtdKGNvbnN0IFN0cmluZyYgdmFyeWluZykgewog
ICAgICAgICByZXR1cm4gdmFyeWluZy51dGY4KCk7CiAgICAgfSk7CiAgICAgVmVjdG9yPGNvbnN0
IGNoYXIqPiBwb2ludGVyc1RvVmFyeWluZ3MgPSBjb252ZXJ0ZWRWYXJ5aW5ncy5tYXAoW10oY29u
c3QgQ1N0cmluZyYgdmFyeWluZykgewogICAgICAgICByZXR1cm4gdmFyeWluZy5kYXRhKCk7CiAg
ICAgfSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBnbDo6VHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCBwb2ludGVyc1RvVmFyeWluZ3Muc2l6ZSgpLCBwb2ludGVy
c1RvVmFyeWluZ3MuZGF0YSgpLCBidWZmZXJNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3Qg
cHJvZ3JhbSwgR0NHTHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgR0NHTHNpemVpIGJ1ZlNpemUgPSAwOwogICAgIGdsOjpHZXRQcm9ncmFt
aXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OlRSQU5TRk9STV9GRUVEQkFDS19W
QVJZSU5HX01BWF9MRU5HVEgsICZidWZTaXplKTsKICAgICBpZiAoIWJ1ZlNpemUpCkBAIC0yMDk3
LDcgKzI0NTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZShHQ0dMZW51bSB0YXJnZXQsIEdDR0x1aW50IGlu
ZGV4LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6QmluZEJ1ZmZlckJhc2UodGFyZ2V0LCBpbmRleCwgYnVmZmVyKTsKIH0KIApAQCAtMjEz
MSwzMiArMjQ5MCw0OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBzcmNCeQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpibGl0RnJhbWVidWZmZXIoR0NHTGludCBzcmNYMCwgR0NHTGludCBz
cmNZMCwgR0NHTGludCBzcmNYMSwgR0NHTGludCBzcmNZMSwgR0NHTGludCBkc3RYMCwgR0NHTGlu
dCBkc3RZMCwgR0NHTGludCBkc3RYMSwgR0NHTGludCBkc3RZMSwgR0NHTGJpdGZpZWxkIG1hc2ss
IEdDR0xlbnVtIGZpbHRlcikKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6QmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3Jj
WDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBQbGF0Zm9ybUdMT2JqZWN0IHRl
eHR1cmUsIEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgbGF5ZXIpCiB7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4
dHVyZUxheWVyKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdD
R0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQ0dMZW51bSog
YXR0YWNobWVudHMpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkludmFsaWRhdGVGcmFtZWJ1ZmZlcih0YXJnZXQsIG51bUF0dGFj
aG1lbnRzLCBhdHRhY2htZW50cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBudW1B
dHRhY2htZW50cywgY29uc3QgR0NHTGVudW0qIGF0dGFjaG1lbnRzLCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpJbnZhbGlkYXRl
U3ViRnJhbWVidWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
QnVmZmVyKEdDR0xlbnVtIHNyYykKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVhZEJ1ZmZlcihzcmMpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50
IHpvZmZzZXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byBhdHRycyA9IGNvbnRl
eHRBdHRyaWJ1dGVzKCk7CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9y
V2ViR0wyID8gR3JhcGhpY3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0Nv
bnRleHRHTDo6RlJBTUVCVUZGRVI7CiAKQEAgLTIxNzEsMTYzICsyNTQ3LDIyNSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UzRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsCiAKIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZy
YWdEYXRhTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgcmV0dXJuIGdsOjpHZXRGcmFnRGF0
YUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xdWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQg
djApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xdWkobG9jYXRpb24s
IHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMdWludCB2MCwgR0NHTHVpbnQgdjEpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlVuaWZvcm0ydWkobG9jYXRpb24sIHYwLCB2MSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MikKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybTN1aShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00dWkoR0NHTGludCBsb2NhdGlvbiwgR0NH
THVpbnQgdjAsIEdDR0x1aW50IHYxLCBHQ0dMdWludCB2MiwgR0NHTHVpbnQgdjMpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00dWkobG9jYXRpb24sIHYwLCB2MSwgdjIs
IHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTF1aXYoR0NH
TGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwg
R0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlm
b3JtMXVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYoR0NHTGludCBsb2NhdGlvbiwg
Y29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVu
Z3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMnVpdihsb2NhdGlv
biwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dW5pZm9ybTN1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM3Vpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBk
YXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTR1aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTHVpbnQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtNHVpdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2
KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0
KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJ4M2Z2KGxvY2F0aW9uLCBzcmNM
ZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEg
KyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
TWF0cml4Mng0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4Mng0ZnYobG9j
YXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDR4MmZ2KEdDR0xpbnQgbG9j
YXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dM
dWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5z
cG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXgzeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWlu
dCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRy
aXgzeDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4NHgzZnYo
R0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQq
IGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4NHgzZnYobG9jYXRpb24sIHNyY0xl
bmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKEdDR0x1aW50IGluZGV4LCBHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTGludCB6LCBHQ0dMaW50IHcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0aShpbmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aXYoR0NHTHVpbnQgaW5kZXgs
IGNvbnN0IEdDR0xpbnQqIHZhbHVlcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
VmVydGV4QXR0cmliSTRpdihpbmRleCwgdmFsdWVzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTR1aShHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgeCwg
R0NHTHVpbnQgeSwgR0NHTHVpbnQgeiwgR0NHTHVpbnQgdykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aShpbmRleCwgeCwgeSwgeiwgdyk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWl2KEdDR0x1aW50IGlu
ZGV4LCBjb25zdCBHQ0dMdWludCogdmFsdWVzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpWZXJ0ZXhBdHRyaWJJNHVpdihpbmRleCwgdmFsdWVzKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NHTHVp
bnQgc3RhcnQsIEdDR0x1aW50IGVuZCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBH
Q0dMaW50cHRyIG9mZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd1JhbmdlRWxlbWVudHMobW9kZSwgc3RhcnQsIGVu
ZCwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9mZnNldCkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QnVmZmVycyhHQ0dMc2l6ZWkgbiwgY29u
c3QgR0NHTGVudW0qIGJ1ZnMpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJzKG4sIGJ1ZnMpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcml2KEdDR0xlbnVtIGJ1ZmZlciwg
R0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMaW50KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09m
ZnNldCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6Q2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcyArIHNy
Y09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVy
dWl2KEdDR0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHQ0dMdWludCog
dmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVydWl2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWVzICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJmdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0NHTGZsb2F0KiB2YWx1ZXMsIEdDR0x1aW50IHNyY09mZnNldCkKIHsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
Q2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZmkoR0NHTGVudW0g
YnVmZmVyLCBHQ0dMaW50IGRyYXdidWZmZXIsIEdDR0xmbG9hdCBkZXB0aCwgR0NHTGludCBzdGVu
Y2lsKQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpDbGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5j
aWwpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVRdWVyeShQbGF0
Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxl
dGVRdWVyaWVzKDEsICZxdWVyeSk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppc1F1ZXJ5KFBsYXRmb3JtR0xPYmplY3QgcXVlcnkpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1F1ZXJ5KHF1ZXJ5KTsKIH0KIAogUGxh
dGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnkoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdM
aW50IHZhbHVlOwogICAgIGdsOjpHZXRRdWVyeWl2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsYXRmb3JtR0xPYmplY3Q+KHZhbHVlKTsKQEAgLTIzMzUs
NyArMjc3Myw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFF1ZXJ5KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hCiAKIFBsYXRmb3JtR0xPYmplY3Qg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIoKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworCiAgICAgR0x1aW50IG5hbWUgPSAwOwogICAgIGdsOjpHZW5TYW1wbGVycygxLCAm
bmFtZSk7CiAgICAgcmV0dXJuIG5hbWU7CkBAIC0yMzQzLDEwNCArMjc4MywxMzggQEAgUGxhdGZv
cm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlU2FtcGxlcigpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNhbXBsZXIoUGxhdGZvcm1HTE9iamVj
dCBzYW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVTYW1wbGVy
cygxLCAmc2FtcGxlcik7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc1NhbXBsZXIoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNTYW1wbGVyKHNhbXBsZXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kU2FtcGxlcihHQ0dMdWludCB1bml0LCBQ
bGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkJpbmRTYW1wbGVyKHVuaXQsIHNhbXBsZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyaShQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMaW50IHBhcmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVyUGFyYW1ldGVyZihQbGF0Zm9ybUdMT2JqZWN0
IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgcGFyYW0pCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lLCBwYXJh
bSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0
ZXJmdihQbGF0Zm9ybUdMT2JqZWN0IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1l
dGVyZnYoc2FtcGxlciwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlciwg
R0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpHZXRTYW1wbGVyUGFyYW1ldGVyaXYoc2FtcGxlciwgcG5hbWUsIHZhbHVlKTsKIH0K
IAogR0NHTHN5bmMgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZlbmNlU3luYyhHQ0dMZW51bSBj
b25kaXRpb24sIEdDR0xiaXRmaWVsZCBmbGFncykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwog
ICAgIHJldHVybiBnbDo6RmVuY2VTeW5jKGNvbmRpdGlvbiwgZmxhZ3MpOwogfQogCiBHQ0dMYm9v
bGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNTeW5jKEdDR0xzeW5jIHN5bmMpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1N5bmMoc3luYyk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVN5bmMoR0NHTHN5bmMg
c3luYykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlU3luYyhzeW5jKTsK
IH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsaWVudFdhaXRTeW5jKEdD
R0xzeW5jIHN5bmMsIEdDR0xiaXRmaWVsZCBmbGFncywgR0NHTHVpbnQ2NCB0aW1lb3V0KQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKwogICAgIHJldHVybiBnbDo6Q2xpZW50
V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp3YWl0U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdD
R0xpbnQ2NCB0aW1lb3V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpXYWl0U3lu
YyhzeW5jLCBmbGFncywgdGltZW91dCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFN5bmNpdihHQ0dMc3luYyBzeW5jLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xpbnQgKnZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRTeW5jaXYoc3luYywgcG5hbWUsIGJ1ZlNpemUsIG51bGxwdHIsIHZhbHVlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGF1c2VUcmFuc2Zvcm1GZWVkYmFjaygpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlBhdXNlVHJhbnNmb3JtRmVlZGJhY2soKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzdW1lVHJhbnNmb3JtRmVlZGJhY2so
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpSZXN1bWVUcmFuc2Zvcm1GZWVkYmFj
aygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyUmFuZ2Uo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIs
IEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6QmluZEJ1ZmZlclJhbmdlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zm
c2V0LCBzaXplKTsKIH0KIAogVmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0VW5pZm9ybUluZGljZXMoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdW5pZm9ybU5hbWVzKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4geyB9OworCiAgICAgVmVjdG9yPENTdHJpbmc+IHV0ZjggPSB1bmlmb3JtTmFt
ZXMubWFwKFtdKGF1dG8mIHgpIHsgcmV0dXJuIHgudXRmOCgpOyB9KTsKICAgICBWZWN0b3I8Y29u
c3QgY2hhcio+IGNzdHIgPSB1dGY4Lm1hcChbXShhdXRvJiB4KSB7IHJldHVybiB4LmRhdGEoKTsg
fSk7CiAgICAgVmVjdG9yPEdDR0x1aW50PiByZXN1bHQoY3N0ci5zaXplKCksIDApOwpAQCAtMjUw
Miw2NyArMjk3Niw4OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbAogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xm
bG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xZnYobG9jYXRpb24sIHNyY0xlbmd0
aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnVuaWZvcm0yZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dM
dWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VW5pZm9ybTJmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zm
c2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dM
aW50IGxvY2F0aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwg
R0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlm
b3JtM2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIGNv
bnN0IEdDR0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5n
dGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00ZnYobG9jYXRpb24s
IHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSAr
IHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zm
c2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlVuaWZvcm0yaXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlv
biwgY29uc3QgR0NHTGludCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNM
ZW5ndGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zaXYobG9jYXRp
b24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGludCog
ZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0
YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm1NYXRyaXgyZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwg
ZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVu
Z3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCmluZGV4IGJkMGY5M2UyMDRi
ZGQ4ZDkyYTQyYWRkODk5NmRkNGZiZWY5YWQ1ZWIuLjJlMWM3OTllODI4NTNiMzIwYjhjZWRkZDRh
NmZlNWU1MDRhOWQ4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2Nv
YS5tbQpAQCAtMzg3LDEwICszODcsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCgpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVtb3ZlQ29udGV4
dCh0aGlzKTsKLQotICAgIGlmIChtX2NvbnRleHRPYmopIHsKKyAgICBpZiAobWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dHJzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7IC8vIFRP
RE86IGNoZWNrIHJlc3VsdC4KICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwogCiAgICAgICAgIGlmIChhdHRycy5hbnRpYWxpYXMpIHsKQEAgLTQwNywxOCArNDA1LDE4
IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQog
ICAgICAgICAgICAgZ2w6OkRlbGV0ZVRleHR1cmVzKDEsICZtX3ByZXNlcnZlRHJhd2luZ0J1ZmZl
clRleHR1cmUpOwogICAgICAgICBpZiAobV9wcmVzZXJ2ZURyYXdpbmdCdWZmZXJGQk8pCiAgICAg
ICAgICAgICBnbDo6RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX3ByZXNlcnZlRHJhd2luZ0J1ZmZl
ckZCTyk7Ci0KLSAgICAgICAgaWYgKG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpIHsKLSAgICAgICAg
ICAgIEVHTF9SZWxlYXNlVGV4SW1hZ2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVm
ZmVyLCBFR0xfQkFDS19CVUZGRVIpOwotICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1f
ZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVmZmVyUGJ1ZmZlcik7Ci0gICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpCisgICAgICAgIEVHTF9EZXN0cm95U3VyZmFj
ZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOworICAgIGlmIChtX3dlYkdM
TGF5ZXIpIHsKICAgICAgICAgYXV0byByZWN5Y2xlZEJ1ZmZlciA9IFttX3dlYkdMTGF5ZXIgcmVj
eWNsZUJ1ZmZlcl07CiAgICAgICAgIGlmIChyZWN5Y2xlZEJ1ZmZlci5oYW5kbGUpCiAgICAgICAg
ICAgICBFR0xfRGVzdHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCByZWN5Y2xlZEJ1ZmZlci5oYW5k
bGUpOwogICAgICAgICBhdXRvIGNvbnRlbnRzSGFuZGxlID0gW21fd2ViR0xMYXllciBkZXRhY2hD
bGllbnRdOwogICAgICAgICBpZiAoY29udGVudHNIYW5kbGUpCiAgICAgICAgICAgICBFR0xfRGVz
dHJveVN1cmZhY2UobV9kaXNwbGF5T2JqLCBjb250ZW50c0hhbmRsZSk7Ci0KKyAgICB9CisgICAg
aWYgKG1fY29udGV4dE9iaikgewogICAgICAgICBFR0xfTWFrZUN1cnJlbnQobV9kaXNwbGF5T2Jq
LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKICAgICAg
ICAgRUdMX0Rlc3Ryb3lDb250ZXh0KG1fZGlzcGxheU9iaiwgbV9jb250ZXh0T2JqKTsKICAgICB9
CkBAIC01NTIsMTIgKzU1MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzZXRD
b250ZXh0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkKICNpZiBQTEFURk9STShNQUMpCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1cGRhdGVDR0xDb250ZXh0KCkKIHsKLSAgICBpZiAo
IW1fY29udGV4dE9iaikKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQogICAgICAgICBy
ZXR1cm47Ci0KICAgICBMT0coV2ViR0wsICJEZXRlY3RlZCBhIG11eCBzd2l0Y2ggb3IgZGlzcGxh
eSByZWNvbmZpZ3VyYXRpb24uIENhbGwgQ0dMVXBkYXRlQ29udGV4dC4gKCVwKSIsIHRoaXMpOwog
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgRUdMRGV2aWNlRVhUIGRldmljZSA9IG51
bGxwdHI7CiAgICAgRUdMX1F1ZXJ5RGlzcGxheUF0dHJpYkVYVChtX2Rpc3BsYXlPYmosIEVHTF9E
RVZJQ0VfRVhULCByZWludGVycHJldF9jYXN0PEVHTEF0dHJpYio+KCZkZXZpY2UpKTsKICAgICBD
R0xDb250ZXh0T2JqIGNnbENvbnRleHQgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdM
LmNwcAppbmRleCBiYmQ5ZDQ0NmY5MWVkNWUxYmJiYTRkMzcwMmQ0MzJmNzFlZmZhNGUwLi4xNzc4
NmE2NGJhNGUxZGEwMDk2NGVhZTk5N2QyOTI3NjRkYWQxODk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dM
T3BlbkdMLmNwcApAQCAtNTAsMTcgKzUwLDI1IEBAIEV4dGVuc2lvbnNHTE9wZW5HTDo6fkV4dGVu
c2lvbnNHTE9wZW5HTCgpID0gZGVmYXVsdDsKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmJs
aXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNy
Y1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNp
Z25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogeworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJs
aXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkw
LCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7CisgICAgaWYgKCFtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKHRhcmdldCwgc2FtcGxlcywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lv
bnNHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBhcnJheSA9IDA7CiAjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RT
dXBwb3J0ZWQoKSkKQEAgLTc2LDcgKzg0LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRl
bGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQogICAgIGlmIChpc1Zl
cnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCiAgICAgICAgIGdsRGVsZXRlVmVydGV4QXJyYXlz
KDEsICZhcnJheSk7CkBAIC05MCw3ICsxMDAsOSBAQCBHQ0dMYm9vbGVhbiBFeHRlbnNpb25zR0xP
cGVuR0w6OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAo
IWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXSU4pCiAgICAgaWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKICAgICAg
ICAgcmV0dXJuIGdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CkBAIC0xMDIsNyArMTE0LDkgQEAgR0NH
TGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCiAgICAg
aWYgKGlzVmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQoKSkKICAgICAgICAgZ2xCaW5kVmVydGV4
QXJyYXkoYXJyYXkpOwpAQCAtMTk2LDYgKzIxMCw5IEBAIGJvb2wgRXh0ZW5zaW9uc0dMT3BlbkdM
OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9u
c0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVChHQ0dMc2l6ZWkgbiwgY29uc3QgR0NHTGVudW0qIGJ1
ZnMpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICAvLyAgRklYTUU6IGltcGxlbWVudCBzdXBwb3J0IGZvciBvdGhlciBw
bGF0Zm9ybXMuCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3QnVmZmVycyhuLCBidWZz
KTsKQEAgLTIwNyw3ICsyMjQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0J1ZmZl
cnNFWFQoR0NHTHNpemVpIG4sIGNvbnN0IEdDR0xlbnVtKiBidWZzKQogCiB2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZp
cnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6
OmdsRHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAj
ZWxzZQpAQCAtMjIwLDcgKzIzOSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QXJy
YXlzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzCiAKIHZvaWQg
RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwg
R0NHTHNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQ0dMc2l6
ZWkgcHJpbWNvdW50KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICNpZiBQTEFURk9STShHVEspCiAgICAgOjpnbERyYXdFbGVtZW50c0luc3RhbmNlZChtb2Rl
LCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRw
dHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiAjZWxzZQpAQCAtMjM0LDcgKzI1NSw5IEBAIHZv
aWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9k
ZSwgR0NHTHNpemVpIGNvdW50LCBHCiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShHVEspCiAg
ICAgOjpnbFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
R0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCmluZGV4IGY2NGJkZWUzMTI5MzNiZjNlZGQ1ZmJkZjUz
MTkyZGI0NTRhN2VkYzYuLmFiOGNiNTRmNWU4NzllZjRiOGE5MGQxOWE3ZWM5MmM4OWNlMjA1N2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zR0xPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcApAQCAtODUsNiArODUsOCBAQCBib29s
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogCiB2
b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxl
SU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVk
IGxvbmcgc2FtcGxlcykKIHsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKICAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcpCiAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxl
SU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxl
cyk7CiAgICAgZWxzZQpAQCAtOTMsNiArOTUsOCBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVT
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZwog
CiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUcpCiAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFy
Z2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgZWxzZQpA
QCAtMTA2LDYgKzExMCw4IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJsaXRGcmFtZWJ1
ZmZlcihsb25nIC8qIHNyY1gwICovLCBsb25nIC8qIHNyY1kwICovLCBsCiAKIHZvaWQgRXh0ZW5z
aW9uc0dMT3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
ICAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykKICAgICAgICAg
cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGVsc2UKQEAgLTEyOSw4ICsxMzUsOSBAQCB2
b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpwb3BHcm91cE1hcmtlckVYVCh2b2lkKQogCiBQbGF0
Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9nbEdl
blZlcnRleEFycmF5c09FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgR0x1aW50IGFycmF5ID0g
MDsKICAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwogICAgICAgICBy
ZXR1cm4gYXJyYXk7CkBAIC0xNDQsMzMgKzE1MSwzNSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewogICAg
IGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgaWYg
KG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2dsRGVs
ZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKIH0KIAogR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmlzVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQog
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0KLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIGlmIChtX2dsSXNWZXJ0ZXhBcnJheU9FUykKKyAgICBpZiAobV9nbElzVmVy
dGV4QXJyYXlPRVMpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogICAgICAgICByZXR1cm4gbV9nbElz
VmVydGV4QXJyYXlPRVMoYXJyYXkpOwotCisgICAgfQogICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
dm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xP
YmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJheU9FUykKKyAgICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJh
eU9FUykgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkp
OwotICAgIGVsc2UKKyAgICB9IGVsc2UKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiB9CiAKQEAgLTE4OCw4ICsxOTcsOSBAQCBpbnQg
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogICAgIGlm
IChtX2NvbnRleHRSZXNldFN0YXR1cyAhPSBHTF9OT19FUlJPUikKICAgICAgICAgcmV0dXJuIG1f
Y29udGV4dFJlc2V0U3RhdHVzOwogICAgIGlmIChtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VY
VCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgICAgICBp
bnQgcmVhc29uRm9yUmVzZXQgPSBtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCgpOworICAg
ICAgICBpbnQgcmVhc29uRm9yUmVzZXQgPSBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOworICAg
ICAgICBpZiAobV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJl
YXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQoKTsKICAgICAgICAg
aWYgKHJlYXNvbkZvclJlc2V0ICE9IEdMX05PX0VSUk9SKQogICAgICAgICAgICAgbV9jb250ZXh0
UmVzZXRTdGF0dXMgPSByZWFzb25Gb3JSZXNldDsKICAgICAgICAgcmV0dXJuIHJlYXNvbkZvclJl
c2V0OwpAQCAtMjAyLDcgKzIxMiw5IEBAIGludCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Z2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZWFkblBp
eGVsc0VYVChpbnQgeCwgaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwg
R0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgdm9pZCAq
ZGF0YSkKIHsKICAgICBpZiAobV9nbFJlYWRuUGl4ZWxzRVhUKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVk
LCBpLmUuLAogICAgICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICAgICAgOjpnbEZsdXNoKCk7CkBAIC0y
MTksNyArMjMxLDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQo
aW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXoKIHZvaWQgRXh0ZW5zaW9uc0dM
T3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9u
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgZmxvYXQgKnBhcmFtcykKIHsKICAgICBpZiAobV9nbEdldG5V
bmlmb3JtZnZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWZ2RVhUKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjMwLDcg
KzI0NCw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQoR0NH
THVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5H
TEVTOjpnZXRuVW5pZm9ybWl2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NH
THNpemVpIGJ1ZlNpemUsIGludCAqcGFyYW1zKQogewogICAgIGlmIChtX2dsR2V0blVuaWZvcm1p
dkVYVCkgewotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgbV9nbEdldG5Vbmlmb3JtaXZFWFQocHJvZ3JhbSwgbG9jYXRpb24sIGJ1
ZlNpemUsIHBhcmFtcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDUsNyArMjYxLDkg
QEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51
bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0cKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2dsRHJhd0FycmF5
c0luc3RhbmNlZEFOR0xFKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKIH0KIApAQCAt
MjU2LDcgKzI3NCw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
bV9nbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSwgcHJpbWNv
dW50KTsKIH0KIApAQCAtMjY3LDcgKzI4Nyw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRpdmlzb3IpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgbV9nbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpbmRleCwgZGl2aXNv
cik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKaW5kZXggZDFlZjYzNDgx
ZTdkNTUwNmY4NGJmMmE3MzllMTk3ODg2ZTYyMmY0Ni4uMjQ0Mjg5ZDViZWQyMGI5MGMwZTY2YzNj
Mzc1NDM1MTJmMjQ5MDlhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmgKQEAg
LTEwOCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKLSAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW51bSBjbGFzcyBSZWxlYXNlQmVoYXZp
b3IgewogICAgICAgICBQcmVzZXJ2ZVRocmVhZFJlc291cmNlcywKQEAgLTUxNyw2ICs1MTYsOSBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNz
Q29udGV4dEdMQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIERlc3RpbmF0aW9uID0gRGVzdGluYXRp
b246Ok9mZnNjcmVlbiwgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wqIHNoYXJlZENvbnRleHQgPSBu
dWxscHRyKTsKIAorICAgIC8vIENhbGxlZCBvbmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBv
aW50cyB0aGF0IGV2ZW50dWFsbHkgY2FsbCBPcGVuR0wuCisgICAgLy8gQ2FsbGVkIG9uY2UgYnkg
YWxsIHRoZSBwdWJsaWMgZW50cnkgcG9pbnRzIG9mIEV4dGVuc2lvbnNHTCB0aGF0IGV2ZW50dWFs
bHkgY2FsbCBPcGVuR0wuCisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiAKICAgICAvLyBUYWtlIGludG8gYWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3Rl
ZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMsCiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVu
Y2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKaW5kZXggMjBiZjJmNGY5ODRjYzdm
MmJiNzNjNmRhNTU5ZjA4MDBhMzNhMTQ5Yy4uNzUwZWQzMjZlY2U2NWU4OGY2YjQxMzYwMTVjNGY5
MzM3NDQ4OWNhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQmFzZS5j
cHAKQEAgLTIzNyw3ICsyMzcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBVU0UoT1BFTkdMKQogICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpIHsKICAgICBjYXNlIERFUFRIX1NURU5DSUw6CkBAIC0yNjQsNyAr
MjY2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVu
dW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogICAgIC8vIGJlY2F1c2UgZGVza3RvcCBHTCdzIGNv
cnJlc3BvbmRpbmcgcXVlcmllcyByZXR1cm4gdGhlIG51bWJlciBvZiBjb21wb25lbnRzCiAgICAg
Ly8gd2hlcmVhcyBHTEVTMiByZXR1cm4gdGhlIG51bWJlciBvZiB2ZWN0b3JzIChlYWNoIHZlY3Rv
ciBoYXMgNCBjb21wb25lbnRzKS4KICAgICAvLyBUaGVyZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5l
ZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlkZWQgYnkgNC4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAjaWYgVVNFKE9QRU5HTCkKICAgICBjYXNlIE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CkBAIC0zMTAsNyArMzE0LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNo
YWRlclR5cGUsIEdDR0wKICAgICBBU1NFUlQocmFuZ2UpOwogICAgIEFTU0VSVChwcmVjaXNpb24p
OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsK
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dEdMOjpMT1dfSU5UOgpAQCAtNDAzLDEzICs0MDksMTcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckRlcHRoKEdDR0xjbGFtcGYgZGVwdGgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQog
CkBAIC00MjgsNyArNDM4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBp
eGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLAogCiAgICAgLy8gRklY
TUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBm
aXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBi
ZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsRmx1c2goKTsKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOwogICAgIGlmIChhdHRycy5hbnRpYWxpYXMgJiYgbV9zdGF0ZS5ib3VuZERy
YXdGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggYjE0YjYyZDVlNGZiZWE4ZWEyYzg3ODU2ZTdiZmVk
NmI4ZDM4NjdiMi4uOTg0ZjYyZDBiNTRkZDhhOGFlYTM5N2IwODE3N2ViOGI0NmM5ZmY3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC0yMDAs
NyArMjAwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJlcGFyZVRleHR1cmUo
KQogICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAKICNpZiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIFRlbXBv
cmFyeU9wZW5HTFNldHRpbmcgc2NvcGVkU2Npc3NvcihHTF9TQ0lTU09SX1RFU1QsIEdMX0ZBTFNF
KTsKQEAgLTIzOSw3ICsyNDEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFk
UmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogICAgIGlmIChw
aXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGJvb2wgbXVzdFJlc3RvcmVG
Qk8gPSBmYWxzZTsKICAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxpYXMpIHsKQEAg
LTI3Myw5ICsyNzcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVy
aW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBp
ZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjgzLDEyICsyODQsMTQgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgaWYgKHdp
ZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKIAogICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CiAgICAgbV9jdXJyZW50SGVpZ2h0
ID0gaGVpZ2h0OwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgdmFsaWRhdGVBdHRy
aWJ1dGVzKCk7CiAKICAgICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xf
U0NJU1NPUl9URVNULCBHTF9GQUxTRSk7CkBAIC00MjcsNyArNDMwLDkgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cHJlY2lzaW9uc01hdGNoKFBsYXRmb3JtR0xPYmplY3QgdmVydGV4
U2hhZGVyLCBQbGEKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVy
ZShHQ0dMZW51bSB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fc3RhdGUu
YWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlOwogICAgIDo6Z2xBY3RpdmVUZXh0dXJlKHRleHR1
cmUpOwogfQpAQCAtNDM2LDcgKzQ0MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmF0dGFjaFNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogICAgIEFTU0VSVChzaGFkZXIpOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsK
ICAgICA6OmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CiB9CkBAIC00NDQsNyArNDUx
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwcGVkU3ltYm9sTmFt
ZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1lKTsKICAgICBMT0co
V2ViR0wsICI6OmJpbmRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51
dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtNDUzLDEzICs0NjEs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTHUKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVy
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVm
ZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEZyYW1lYnVmZmVy
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgR0x1aW50IGZibzsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBmYm8g
PSBidWZmZXI7CkBAIC00NzUsMTAyICs0ODcsMTMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QK
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgcmVuZGVyYnVmZmVy
KTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVGV4dHVyZShHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBtX3N0YXRlLnNldEJvdW5kVGV4dHVyZShtX3N0YXRlLmFjdGl2ZVRleHR1cmVV
bml0LCB0ZXh0dXJlLCB0YXJnZXQpOwogICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1
cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKEdDR0xj
bGFtcGYgcmVkLCBHQ0dMY2xhbXBmIGdyZWVuLCBHQ0dMY2xhbXBmIGJsdWUsIEdDR0xjbGFtcGYg
YWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpi
bGVuZEVxdWF0aW9uKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbEJsZW5kRXF1YXRpb24obW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQ0dMZW51bSBtb2RlUkdCLCBHQ0dMZW51bSBtb2Rl
QWxwaGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJsZW5kRXF1YXRpb25TZXBh
cmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJsZW5kRnVuYyhHQ0dMZW51bSBzZmFjdG9yLCBHQ0dMZW51bSBkZmFjdG9yKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7
CiB9ICAgICAgIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBh
cmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVtIGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEs
IEdDR0xlbnVtIGRzdEFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVu
ZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQs
IEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1c2FnZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsQnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEs
IHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0
YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwg
Y29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7CiB9CiAKIEdDR0xlbnVtIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDR0xlbnVtIHRhcmdl
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICByZXR1
cm4gOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQodGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJDb2xvcihHQ0dMY2xhbXBmIHIsIEdDR0xjbGFtcGYg
ZywgR0NHTGNsYW1wZiBiLCBHQ0dMY2xhbXBmIGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbENsZWFyQ29sb3IociwgZywgYiwgYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNsZWFyKEdDR0xiaXRmaWVsZCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xDbGVhcihtYXNrKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwoR0NHTGludCBzKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhclN0ZW5jaWwocyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayhHQ0dMYm9vbGVhbiByZWQsIEdDR0xib29s
ZWFuIGdyZWVuLCBHQ0dMYm9vbGVhbiBibHVlLCBHQ0dMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhh
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBUdXJuIG9uIG5hbWUgbWFwcGluZy4gRHVlIHRvIHRoZSB3YXkgQU5H
TEUgbmFtZSBoYXNoaW5nIHdvcmtzLCB3ZQogICAgIC8vIHBvaW50IGEgZ2xvYmFsIGhhc2htYXAg
dG8gdGhlIG1hcCBvd25lZCBieSB0aGlzIGNvbnRleHQuCkBAIC02MzIsNyArNjc1LDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0
IHNoYWRlcikKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXJEaXJl
Y3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgSGFzaE1hcDxQbGF0Zm9ybUdMT2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKIApAQCAtNjY2LDcgKzcxMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
bXBpbGVTaGFkZXJEaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dCBsZXZlbCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwog
CiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKQEAgLTY4MSw3ICs3MjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50
IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwog
CiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1fc3RhdGUuYm91bmREcmF3RkJP
KTsKQEAgLTY5NiwxOSArNzQ0LDI1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNv
cHlUZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3VsbEZhY2UoR0NHTGVudW0gbW9kZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsQ3VsbEZhY2UobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoRnVuYyhHQ0dMZW51bSBmdW5jKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xEZXB0aEZ1bmMoZnVuYyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRlcHRoTWFzayhHQ0dMYm9vbGVhbiBmbGFnKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7CiB9CiAKQEAgLTcxNiw4MyArNzcw
LDEwOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZv
cm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogewogICAgIEFTU0VSVChwcm9ncmFtKTsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3NoYWRlclBy
b2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJvZ3JhbSk7CiAgICAgOjpnbERldGFjaFNoYWRl
cihwcm9ncmFtLCBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
aXNhYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGlz
YWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXMoR0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJz
dCwgR0NHTHNpemVpIGNvdW50KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0
KSkpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmVuYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbEVuYWJsZShjYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmaW5pc2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xGaW5pc2goKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1
c2goKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGbHVzaCgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1l
bnQsIEdDR0xlbnVtIHRleHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlLCBHQ0dMaW50
IGxldmVsKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwog
ICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0
dXJlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcm9udEZhY2UoR0NH
TGVudW0gbW9kZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJvbnRGYWNlKG1v
ZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcChH
Q0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdlbmVyYXRl
TWlwbWFwKHRhcmdldCk7CiB9CiAKQEAgLTgwMiw3ICs4ODIsOSBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVBdHRyaWJJbXBsKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3Jh
bSwgR0NHTAogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBH
TGludCBtYXhBdHRyaWJ1dGVTaXplID0gMDsKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0s
IEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUpOwogICAg
IFZlY3RvcjxHTGNoYXI+IG5hbWUobWF4QXR0cmlidXRlU2l6ZSk7IC8vIEdMX0FDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgpAQCAtODQ4LDcgKzkz
MCw5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBs
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBHTGludCBtYXhVbmlmb3JtU2l6
ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9N
QVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwogCkBAIC04OTQsNyArOTc4LDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtR0xPYmpl
Y3QgcHJvZ3JhbSwgR0NHTHMKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOwog
fQogCkBAIC0xMDM3LDcgKzExMjMsOSBAQCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgUwogICAgIGlm
ICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CiAgICAgTE9HKFdlYkdMLCAiOjpnbEdl
dEF0dHJpYkxvY2F0aW9uIGlzIG1hcHBpbmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCks
IG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CkBAIC0xMDQ5LDE0ICsxMTM3LDE4IEBAIGludCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBjCiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm4gLTE7CisKIAogICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogYm9vbCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBib29sIG1vdmVkQW5FcnJvciA9IGZhbHNlOwogCiAg
ICAgLy8gU2V0IGFuIGFyYml0cmFyeSBsaW1pdCBvZiAxMDAgaGVyZSB0byBhdm9pZCBjcmVhdGlu
ZyBhIGhhbmcgaWYKQEAgLTEwODMsMTkgKzExNzUsMjUgQEAgR0NHTGVudW0gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKCkKICAgICAgICAgcmV0dXJuIG1fc3ludGhldGljRXJyb3Jz
LnRha2VGaXJzdCgpOwogICAgIH0KIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKKwogICAgIHJldHVybiA6OmdsR2V0RXJyb3IoKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpnZXRTdHJpbmcoR0NHTGVudW0gbmFtZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcobmFtZSkpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6aGludChHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbEhpbnQodGFyZ2V0LCBtb2RlKTsKIH0KIApAQCAtMTEw
NCwxMyArMTIwMiwxNyBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNC
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJl
dHVybiA6OmdsSXNCdWZmZXIoYnVmZmVyKTsKIH0KIAogR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZChHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc0VuYWJsZWQoY2FwKTsKIH0KIApAQCAtMTEx
OSw3ICsxMjIxLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzRnJh
bWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKICAgICBpZiAoIWZyYW1lYnVm
ZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoZnJhbWVidWZmZXIpOwogfQog
CkBAIC0xMTI4LDcgKzEyMzIsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKICAgICBpZiAoIXByb2dyYW0p
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KwogICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xMTM3LDcgKzEy
NDMsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNSZW5kZXJidWZm
ZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZQogICAgIGlmICghcmVuZGVyYnVmZmVyKQog
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKHJlbmRlcmJ1ZmZlcik7CiB9CiAKQEAg
LTExNDYsNyArMTI1NCw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1NoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKICAgICBpZiAoIXNoYWRlcikKICAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAg
cmV0dXJuIDo6Z2xJc1NoYWRlcihzaGFkZXIpOwogfQogCkBAIC0xMTU1LDIwICsxMjY1LDI2IEBA
IEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1RleHR1cmUoUGxhdGZvcm1H
TE9iamVjdCB0ZXh0dXJlKQogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1Rl
eHR1cmUodGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmVX
aWR0aChHQ0dMZmxvYXQgd2lkdGgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbExp
bmVXaWR0aCh3aWR0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQ
cm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBHQ0dMc2l6ZWkgY291bnQgPSAwOwogICAgIFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyc1syXSA9IHsgfTsKQEAgLTExODIsMjUgKzEyOTgsMzMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bGlua1Byb2dyYW0oUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwaXhlbFN0b3JlaShH
Q0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cG9seWdvbk9mZnNldChHQ0dMZmxvYXQgZmFjdG9yLCBHQ0dMZmxvYXQgdW5p
dHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9y
LCB1bml0cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVy
YWdlKEdDR0xjbGFtcGYgdmFsdWUsIEdDR0xib29sZWFuIGludmVydCkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsU2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNjaXNzb3IoR0NHTGludCB4LCBHQ0dMaW50IHks
IEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMTIwOCw3
ICsxMzMyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2hhZGVyU291cmNlKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcKIHsKICAgICBBU1NFUlQoc2hhZGVy
KTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7
CiAKQEAgLTEyMTksMTc4ICsxMzQ1LDIzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZwogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBH
Q0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBm
dW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNr
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsTWFzayhtYXNrKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dM
ZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdD
R0xlbnVtIHpwYXNzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xTdGVuY2lsT3Ao
ZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0g
emZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xT
dGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NH
TGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
ZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQg
djApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0xZihsb2NhdGlvbiwg
djApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBs
ZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxv
YXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xVbmlmb3JtM2YobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xz
aXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3Jt
MWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCog
YXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0xaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8gRklY
TUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQgdjIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNp
emVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBH
Q0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xVbmlmb3JtNGkobG9jYXRpb24sIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxl
bmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBH
Q0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFy
cmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9u
LCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwg
R0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5LgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVc2VQcm9ncmFt
KHByb2dyYW0pOwogfQogCkBAIC0xMzk4LDczICsxNTgwLDk3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7
CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZh
bGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMWYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWZ2KEdDR0x1aW50IGlu
ZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2
MCwgR0NHTGZsb2F0IHYxKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhB
dHRyaWIyZihpbmRleCwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliMmZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZnYoaW5kZXgs
IGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
M2YoR0NHTHVpbnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQg
djIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjNmKGluZGV4
LCB2MCwgdjEsIHYyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliM2Z2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYoR0NHTHVp
bnQgaW5kZXgsIEdDR0xmbG9hdCB2MCwgR0NHTGZsb2F0IHYxLCBHQ0dMZmxvYXQgdjIsIEdDR0xm
bG9hdCB2MykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliNGYo
aW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliNGZ2KEdDR0x1aW50IGluZGV4LCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgs
IGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
Ym9vbGVhbiBub3JtYWxpemVkLCBHQ0dMc2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmRl
eCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KEdDR0xpbnQgeCwgR0NHTGludCB5LCBHQ0dMc2l6ZWkg
d2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKICAgICBHTHVpbnQgYXJyYXkgPSAwOwogI2lmICghVVNFKE9QRU5HTF9FUykg
JiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQog
ICAgIDo6Z2xHZW5WZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKQEAgLTE0NzcsNyArMTY4Myw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVZlcnRleEFycmF5KFBsYXRmb3Jt
R0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xEZWxldGVW
ZXJ0ZXhBcnJheXMoMSwgJmFycmF5KTsKICNlbmRpZgpAQCAtMTQ4OCw3ICsxNjk2LDkgQEAgR0NH
TGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkoUGxhdGZvcm1H
TE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7
CiAgICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAjaWYgKCFVU0UoT1BFTkdMX0VT
KSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0Ep
CiAgICAgcmV0dXJuIDo6Z2xJc1ZlcnRleEFycmF5KGFycmF5KTsKICNlbmRpZgpAQCAtMTQ5Nyw3
ICsxNzA3LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4
QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAjaWYgKCFVU0UoT1BFTkdMX0VTKSAmJiAoUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShXSU4pKSkgfHwgUExBVEZPUk0oQ09DT0EpCiAgICAgOjpnbEJpbmRWZXJ0ZXhBcnJh
eShhcnJheSk7CiAjZWxzZQpAQCAtMTUwNywxOSArMTcxOSwyNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kVmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYoR0NHTGVudW0gcG5hbWUs
IEdDR0xib29sZWFuKiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0
Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldEJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0RmxvYXR2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQqIHZhbHVl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHZhbHVl
KTsKIH0KIApAQCAtMTUyNyw3ICsxNzQ1LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDR0wKIHsK
ICAgICBVTlVTRURfUEFSQU0ocG5hbWUpOwogICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJl
Zm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wz
LmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBP
cGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyaV92KHBuYW1lLCBpbmRleCwgdmFs
dWUpOwpAQCAtMTUzNiw3ICsxNzU2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0SW50ZWdlcmlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDR0wKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYoR0NHTGVudW0gcG5hbWUsIEdD
R0xpbnQ2NCogdmFsdWUpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVu
YWJsaW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQg
Y3JlYXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBF
UyAzLjAuCiAgICAgLy8gOjpnbEdldEludGVnZXI2NHYocG5hbWUsIHZhbHVlKTsKQEAgLTE1NDYs
NyArMTc2OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlf
dihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDCiB7CiAgICAgVU5VU0VEX1BBUkFN
KHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQxMTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhp
cyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVzaW5nIGdsMy5oIGFuZCBjcmVhdGluZyBh
bmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQgdXNpbmcgT3BlbkdMIEVTIDMuMC4KICAg
ICAvLyA6OmdsR2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwpAQCAtMTU1NCw3
ICsxNzc4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0aV92
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCBpbmRleCwgR0MKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFs
dWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UKQogICAgICAgICBhdHRhY2htZW50ID0gREVQVEhfQVRUQUNITUVO
VDsgLy8gT3IgU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3MuCiAgICAgOjpnbEdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5h
bWUsIHZhbHVlKTsKQEAgLTE1NjIsNyArMTc4OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdl
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdihQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKQEAgLTE1NzIsNyArMTgwMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChQbGF0Zm9ybUdMT2JqZWN0IHByCiAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAuZmlu
ZChwcm9ncmFtKTsKICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLmVuZCgpKSB7CiAgICAgICAgICp2YWx1ZSA9IHJlc3VsdC0+dmFsdWUuY291bnRGb3JUeXBl
KHBuYW1lKTsKQEAgLTE2NTAsNyArMTg4MCw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAg
IEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEdM
aW50IGxlbmd0aCA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTY2OSw3ICsxOTAxLDkg
QEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2
NzcsNyArMTkxMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBHQ0dMZW51bSBwbmFtCiB7CiAgICAgQVNTRVJUKHNo
YWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICAKQEAgLTE3MTIsNyArMTk0OCw4
IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQpAQCAtMTczOSw3ICsxOTc2LDggQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNT
RVJUKHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBh
dXRvJiByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJl
c3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKQEAgLTE3NTAsMjUgKzE5ODgsMzMgQEAg
U3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFRleFBh
cmFtZXRlcmZ2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFs
dWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRh
cmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VGV4UGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFRleFBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0VW5pZm9ybWZ2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2Nh
dGlvbiwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0s
IEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xHZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIApA
QCAtMTc4Myw3ICsyMDI5LDggQEAgR0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY28KIHsKICAgICBBU1NF
UlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CiAKICAgICBTdHJpbmcgbWFwcGVk
TmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZP
Uk0sIG5hbWUpOwogICAgIExPRyhXZWJHTCwgIjo6Z2V0VW5pZm9ybUxvY2F0aW9uIGlzIG1hcHBp
bmcgJXMgdG8gJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEo
KSk7CkBAIC0xNzkyLDE5ICsyMDM5LDI0IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYmZ2KEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KEdDR0x1
aW50IGluZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFsdWUp
OwogfQogCiBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0
dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBHTHZvaWQqIHBvaW50ZXIgPSAwOwogICAgIDo6Z2xHZXRWZXJ0ZXhB
dHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKQEAgLTE4MTMsNyArMjA2NSw4
IEBAIEdDR0xzaXplaXB0ciBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmli
T2Zmc2V0KEdDR0x1aW50IGluZGV4LCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50
IHhvZmYsIEdDR0xpbnQgeW9mZiwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBH
Q0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CiAKICNpZiAhVVNFKE9QRU5HTF9FUykKICAgICBpZiAodHlwZSA9PSBI
QUxGX0ZMT0FUX09FUykKQEAgLTE4NDQsMjEgKzIwOTcsMjcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleEltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NH
THNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsQ29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0
YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xp
bnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBm
b3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBk
YXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWlu
dCBvID0gMDsKICAgICBnbEdlbkJ1ZmZlcnMoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTg2
Niw3ICsyMTI1LDkgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y3JlYXRlQnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1
aW50IG8gPSAwOwogICAgIGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZvKTsKICAgICByZXR1cm4g
bzsKQEAgLTE4NzQsMTMgKzIxMzUsMTcgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIHJldHVybiBnbENyZWF0ZVByb2dyYW0oKTsKIH0KIAogUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlblJlbmRlcmJ1ZmZl
cnNFWFQoMSwgJm8pOwogICAgIHJldHVybiBvOwpAQCAtMTg4OCwxMyArMjE1MywxNyBAQCBQbGF0
Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIo
KQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFk
ZXIoR0NHTGVudW0gdHlwZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHJldHVybiBn
bENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hB
REVSIDogR0xfVkVSVEVYX1NIQURFUik7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgR0x1aW50IG8gPSAwOwogICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwogICAgIG1fc3Rh
dGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7CkBAIC0xOTAzLDEzICsyMTcyLDE3IEBAIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVj
dCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2xEZWxldGVCdWZmZXJzKDEs
ICZidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5kRHJh
d0ZCTyk7CiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1fc3RhdGUuYm91bmREcmF3RkJPKSB7CiAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGdvaW5nIHRvIGJlIHVz
ZWQgZm9yIGRyYXdpbmcKQEAgLTE5MjEsMjYgKzIxOTQsMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZl
cikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zaGFkZXJQ
cm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIGdsRGVsZXRlUHJvZ3Jh
bShwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3Jt
R0xPYmplY3Qgc2hhZGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRlU2hh
ZGVyKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRl
eHR1cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5
VmFsdWUpIHsKICAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7
CiAgICAgfSk7CkBAIC0xOTk2LDcgKzIyNzcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENv
dW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CkBAIC0yMDIxLDcgKzIz
MDQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpcwogI2lmIEhBVkUoT1BFTkdMXzQpICYmIEVO
QUJMRShXRUJHTDIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0
YXJ0SW5kZXgoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bFByaW1pdGl2ZVJlc3RhcnRJbmRleChpbmRleCk7CiB9CiAjZW5kaWYKQEAgLTIwNDcsNyArMjMz
Miw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRhdGEoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50cHRyIGRzdEJ5dGVPCiAjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFW
RShPUEVOR0xfRVNfMykKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJT
dWJEYXRhKEdDR0xlbnVtIHJlYWRUYXJnZXQsIEdDR0xlbnVtIHdyaXRlVGFyZ2V0LCBHQ0dMaW50
cHRyIHJlYWRPZmZzZXQsIEdDR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdDR0xzaXplaXB0ciBzaXpl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb3B5QnVmZmVyU3ViRGF0YShyZWFk
VGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOwogfQog
I2Vsc2UKQEAgLTIwNjgsMTMgKzIzNTUsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgc3JjQnkKICNp
ZiBIQVZFKE9QRU5HTF80KSB8fCBIQVZFKE9QRU5HTF9FU18zKQogdm9pZCogR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6Om1hcEJ1ZmZlclJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBv
ZmZzZXQsIEdDR0xzaXplaXB0ciBsZW5ndGgsIEdDR0xiaXRmaWVsZCBhY2Nlc3MpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICByZXR1cm4gOjpnbE1hcEJ1ZmZlclJhbmdlKHRh
cmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bm1hcEJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xVbm1hcEJ1ZmZlcih0YXJnZXQp
OwogfQogI2Vsc2UKQEAgLTIxMzksNyArMjQzMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnJlYWRCdWZmZXIoR0NHTGVudW0gc3JjKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xpbnQqIHBh
cmFtcykKIHsKICNpZiBVU0UoT1BFTkdMX0VTKQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6
Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHBuYW1lLCBidWZT
aXplLCBwYXJhbXMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKQEAgLTIxNTIs
MjAgKzI0NDUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxm
b3JtYXRpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGUKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdDR0xlbnVtIHRh
cmdldCwgR0NHTHNpemVpIHNhbXBsZXMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6
ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6dGV4U3RvcmFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTHNpemVpIGxldmVscywgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVGV4U3RvcmFnZTJEKHRhcmdldCwgbGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgbV9zdGF0ZS50ZXh0dXJl
U2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51bSB0YXJnZXQsIEdD
R0xzaXplaSBsZXZlbHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgs
IEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVGV4U3RvcmFnZTNEKHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgpOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQo
bV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAtMjYzMCw3ICsyOTI5LDggQEAg
VmVjdG9yPEdDR0x1aW50PiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUluZGlj
ZXMoUGxhdGZvcm1HTE9iamVjdCBwcm8KIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1zKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9yPEdD
R0x1aW50PiYgdW5pZm9ybUluZGljZXMsIEdDR0xlbnVtIHBuYW1lLCBWZWN0b3I8R0NHTGludD4m
IHBhcmFtcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAg
ICAgOjpnbEdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGljZXMuc2l6ZSgp
LCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0YSgpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVTLmNwcAppbmRleCA5Mzg5NWU1NmIwYzVhNWJk
ODRjYjBhYTQ5ODY4MjBhYTY3MTE0ODE1Li42MGZkZmM2NWY4NzM5NTg5NTc5NWE4NGVmMWUwOWFi
ZjZkN2FhODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCkBA
IC00Miw3ICs0Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdp
ZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUsIHZv
aWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBhdXRvIGF0dHJpYnV0ZXMg
PSBjb250ZXh0QXR0cmlidXRlcygpOwogCkBAIC0xODgsMTMgKzE5MCwxNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0
IEludFJlY3QmKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXpl
aSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwogfQogCkBAIC0yMDMsNyArMjA5LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdD
R0xlbnVtIHNoYWRlclR5cGUsIEdDR0wKICAgICBBU1NFUlQocmFuZ2UpOwogICAgIEFTU0VSVChw
cmVjaXNpb24pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsK
IH0KIApAQCAtMjMyLDEzICsyNDAsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVw
dGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBHQ0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbERlcHRoUmFuZ2VmKHpOZWFyLCB6RmFyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBmIGRlcHRoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7CiB9CiAKQEAg
LTI3OCw3ICsyOTAsOSBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogICAgICwgbV9wcml2YXRl
KG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xQcml2YXRlPih0aGlzLCBkZXN0aW5h
dGlvbikpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChzaGFyZWRDb250ZXh0LCAhc2hhcmVkQ29udGV4
dCk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
CiAgICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUg
Y2hhbmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTM0Myw3ICszNTcsOSBAQCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xB
dHRyaWJ1dGVzIGF0dAogCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7CiAKICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmli
dXRlcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNw
cAppbmRleCBjMGEyZWNiODc0N2MxMThmMDcwNWRmOTE4OThkNDQ5ODJlOTBmMmE3Li44OWQxNGQy
OTU2YjcyZmE0MmVlOTgzNjJhYjgwZDJiYjMwYWIzZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NDb250ZXh0R0xUZXh0dXJlTWFw
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NDb250ZXh0R0xUZXh0dXJlTWFwcGVyLmNwcApAQCAtMTM5LDcgKzEzOSw4IEBAIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRl
eHRHTEF0dHJpYnV0ZXMgYXR0CiAjZWxzZQogICAgIG1fdGV4bWFwTGF5ZXIgPSBXVEY6Om1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVyPigqdGhpcywgZGVzdGluYXRpb24p
OwogI2VuZGlmCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBzdWNjZXNzID0g
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNz
KTsKIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0
QXR0cmlidXRlcygpOyAvLyBUaGV5IG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24u
CkBAIC0yMTMsNyArMjE0LDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICBtX3RleG1h
cExheWVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyR0NHTFBsYXRmb3JtTGF5ZXI+KCp0aGlz
LCBkZXN0aW5hdGlvbik7CiAjZW5kaWYKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1
cmluZyB2YWxpZGF0aW9uLgpAQCAtMzMzLDcgKzMzNSw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMg
YXR0CiAjaWYgVVNFKEFOR0xFKQogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgYm9vbCBz
dWNjZXNzID0gbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNz
LCBzdWNjZXNzKTsKICAgICBpZiAobV90ZXh0dXJlKQogICAgICAgICBnbDo6RGVsZXRlVGV4dHVy
ZXMoMSwgJm1fdGV4dHVyZSk7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtMzc3
LDcgKzM4MCw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0woKQogI2Vsc2UKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3VjY2Vz
cyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3Vj
Y2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAgOjpnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414006</attachid>
            <date>2020-11-12 23:53:37 -0800</date>
            <delta_ts>2020-11-13 01:53:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218178-20201113095335.patch</filename>
            <type>text/plain</type>
            <size>201319</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDljOTU0MjBhNDNkOTgy
NTg4YzlkZWQ3NzdjNzFlMTk3NDg3M2Y3Zi4uNzU5M2Q4ZGY3NTM1MmQ1ZmJkZWNkNTY1Y2RiYzkw
MDg0MjM1MTM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3MiBAQAorMjAyMC0xMC0yOCAgS2lt
bW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1c2Vz
IG9mIE1ha2VDdXJyZW50IGZyb20gV2ViR0wgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxODE3OAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzA3MTQ1NjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgor
CisgICAgICAgIFdvcmsgdG93YXJkcyBXZWJHTCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzCisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dEdMIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5zdGVhZCBvZgor
ICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBjb25jcmV0ZSBjbGFzcy4KKworICAgICAg
ICBNb3ZlIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYWtlQ29udGV4dEN1cnJlbnQoKSB0bwor
ICAgICAgICBwcml2YXRlIHNlY3Rpb24sIGFzIGl0IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZgorICAgICAgICB0aGUgY2xhc3MuIFRoZSBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBj
YWxsZWQgYXQgdGhlCisgICAgICAgIHN0YXJ0IG9mIGFsbCBwdWJsaWMgZnVuY3Rpb25zIHRoYXQg
bWlnaHQgY2FsbCBpbnRvIE9wZW5HTAorICAgICAgICB0byBlbnN1cmUgdGhhdCBPcGVuR0wgdXNl
cyB0aGUgcmlnaHQgY29udGV4dC4KKworICAgICAgICBDaGVjayBhbGwgcmV0dXJuIHZhbHVlcyBv
ZiBtYWtlQ3VycmVudENvbnRleHQoKS4gV2UKKyAgICAgICAgc2hvdWxkIG5vdCBjYWxsIGludG8g
T3BlbkdMIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBjdXJyZW50LAorICAgICAgICBhcyB0aGF0IGNh
biBsZWFkIHRvIGNvcnJ1cHRpb24sIGNyYXNoZXMgb3IgaW5jb3JyZWN0IHJlc3VsdHMuCisgICAg
ICAgIEFkZCBhIGNvbXBpbGUtdGltZSB3YXJuaW5nIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgbm90
IHVzZWQuCisgICAgICAgIE5vbi1FV1MgY29tcGlsZWQgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCBhcmUgY2hhbmdlZAorICAgICAgICBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5l
ci4KKworICAgICAgICBFbnN1cmUgdGhhdCBhbGwgZnVuY3Rpb25zIGFjdHVhbGx5IGNhbGwgdGhl
IG1ha2VDdXJyZW50Q29udGV4dCgpCisgICAgICAgIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIGlu
dG8gT3BlbkdMLiBOb24tQU5HTEUgZmxhdm9ycyBvZgorICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCBhcmUgZW5zdXJlZCBvbmx5IGluIGJlc3QgZWZmb3J0IG1hbm5lci4KKworICAgICAg
ICBBTkdMRSBmbGF2b3Igb2YgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wgZnVuY3Rpb24gaW1wbGVt
ZW50YXRpb25zCisgICAgICAgIHNob3VsZCBjYWxsIGRpcmVjdGx5IHRoZSBBTkdMRSBmdW5jdGlv
bnMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0KKyAgICAgICAgdGhyb3VnaCBnZXRFeHRlbnNpb25z
KCkgaW50ZXJmYWNlLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBjb2RlCisgICAgICAgIGluc2lk
ZSBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGtub3dzIGV4YWN0bHkgd2hpY2ggZnVuY3Rpb24gdG8K
KyAgICAgICAgY2FsbCBpbiBhbGwgc2l0dWF0aW9ucy4gVGhlcmUgaXMgbm8gYWJzdHJhY3Rpb24g
YmV0d2VlbgorICAgICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCBhbmQgRXh0ZW5zaW9uc0dM
LCByYXRoZXIgdGhleSBhcmUKKyAgICAgICAgaW4gcHJhY3RpY2UgdGhlIHNhbWUgb2JqZWN0IGN1
cnJlbnRseSwgc2VtaS1hcnRpZmljaWFsbHkgc3BsaXQgdG8KKyAgICAgICAgdHdvLiBUaGlzIGlz
IHRydWUgb2Ygb3RoZXIgZmxhdm9ycyBvZiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTCwKKyAgICAg
ICAgYnV0IHRob3NlIGFyZSBsZWZ0IHVuY2hhbmdlZCBpbiB0aGlzIHJlZ2FyZC4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIGEgcmVmYWN0b3IuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0VmVydGV4QXR0cmliMCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjplbnN1cmVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhB
cnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmlzVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmJpbmRW
ZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6ZHJh
d0J1ZmZlcnNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdB
cnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmRy
YXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dmVydGV4QXR0cmliRGl2aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0Qm9vbGVhbnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChX
ZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RmxvYXR2Um9idXN0QU5HTEUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmdldEludGVnZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OmdldFByb2dyYW1pdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTaGFkZXJpdlJvYnVzdEFO
R0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhQYXJhbWV0
ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpn
ZXRUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRVbmlmb3JtZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRleEF0dHJpYml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFZlcnRl
eEF0dHJpYlBvaW50ZXJ2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
c0dMQU5HTEU6OnJlYWRQaXhlbHNSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UyRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhTdWJJbWFnZTJEUm9idXN0
QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRU
ZXhJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5H
TEU6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTNEUm9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhTdWJJbWFn
ZTNEUm9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnRl
eEltYWdlM0RSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnNHTEFOR0xFOjpnZXRRdWVyeWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEludGVnZXJpX3ZSb2J1
c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZXJu
YWxmb3JtYXRpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRWZXJ0ZXhBdHRyaWJJaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliSXVpdlJvYnVzdEFOR0xFKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRVbmlmb3JtdWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldEludGVnZXI2NHZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
R0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEJ1ZmZlclBhcmFtZXRlcmk2NHZSb2J1c3RBTkdMRSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9i
dXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQ
YXJhbWV0ZXJmdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldEZyYW1lYnVmZmVyUGFyYW1l
dGVyaXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6
Z2V0UHJvZ3JhbUludGVyZmFjZWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMQU5HTEU6OmdldEJvb2xlYW5pX3ZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2
Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRl
eExldmVsUGFyYW1ldGVyZnZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1c3RBTkdMRVJvYnVzdEFOR0xFKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xFKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5H
TEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0blVu
aWZvcm11aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdM
RTo6dGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUpOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRlckl1aXZS
b2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xBTkdMRTo6c2FtcGxl
clBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2Um9idXN0QU5HTEUp
OgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0
ZXJJdWl2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RBTkdMRSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdMRSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvR3JhcGhpY3NDb250ZXh0R0xBTkdM
RS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFw
ZUZCT3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRJbnRlZ2VyaV92KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YWN0aXZlVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YXR0YWNoU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6bWFwQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVubWFwQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5QnVmZmVyU3ViRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZXJuYWxmb3JtYXRpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp0ZXhTdG9yYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleFN0b3JhZ2UzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFn
ZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5j
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUlt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFj
aGVkU2hhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6aXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmlzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsRnVuY1NlcGFyYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsTWFzayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3BTZXBh
cmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFy
YW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4
UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm0zZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMWkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0xaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZv
cm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9y
bTNpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2l2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
NGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1N
YXRyaXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliM2YpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliNGYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJp
YjRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4
QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dmVydGV4QXR0cmliSVBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2
NGlfdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5m
b0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VGV4
UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29tcHJl
c3NlZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliRGl2aXNvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUJs
b2NrSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiZWdpblF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRRdWVyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1G
ZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNU
cmFuc2Zvcm1GZWVkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpiZWdpblRyYW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjplbmRUcmFuc2Zvcm1GZWVkYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZlclRleHR1cmVMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aW52YWxpZGF0ZUZyYW1lYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppbnZhbGlkYXRl
U3ViRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlYWRCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNvcHlUZXhTdWJJbWFnZTNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRGcmFnRGF0YUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMnVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJ1aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDJ4M2Z2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyeDRm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDR4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtTWF0cml4M3g0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnVuaWZvcm1NYXRyaXg0eDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmliSTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd1JhbmdlRWxlbWVudHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZl
cml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1
ZmZlcnVpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xl
YXJCdWZmZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y2xlYXJCdWZmZXJmaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZGVsZXRlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmdldFF1ZXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
cmVhdGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1NhbXBsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRTYW1wbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpzYW1wbGVyUGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2FtcGxlclBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlU3luYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xpZW50V2FpdFN5bmMpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OndhaXRTeW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTeW5jaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRy
YW5zZm9ybUZlZWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpiaW5kQnVmZmVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5H
TC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OmJsaXRGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0w6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNH
TE9wZW5HTDo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnNHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnNHTE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3QnVmZmVyc0VYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdM
RVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnNHTE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZGVsZXRlVmVy
dGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6Omlz
VmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVu
R0xFUzo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zR0xPcGVuR0xFUzo6cmVhZG5QaXhlbHNFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtZnZFWFQpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmdldG5Vbmlmb3JtaXZFWFQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zR0xPcGVuR0xFUzo6dmVydGV4QXR0cmliRGl2aXNv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFJl
bmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJsZW5kRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRGdW5jU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlclN1YkRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
bGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNvbG9yTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcGlsZVNoYWRlckRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNvcHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjdWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Zmx1c2gpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmcmFtZWJ1ZmZl
clRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
ZnJvbnRGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QWN0aXZlQXR0cmliSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0QWN0aXZlVW5pZm9ybUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGly
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptb3ZlRXJy
b3JzVG9TeW50aGV0aWNFcnJvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpwb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpzdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxPcCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFtZXRlcmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00Zik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNpdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0
cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQ
cm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxp
ZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVWZXJ0ZXhB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzVmVydGV4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmJpbmRWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NHYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFByb2dyYW1pdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlcml2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJJbmZv
TG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dFRleFBhcmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRUZXhQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VmVydGV4QXR0cmliZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0
ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhJbWFnZTJERGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwcmltaXRpdmVSZXN0YXJ0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvcHlCdWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6dGV4U3RvcmFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVhZFBpeGVscyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZUZCT3MpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTaGFkZXJQcmVj
aXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6On5HcmFwaGljc0NvbnRleHRHTE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFw
aGljc0NvbnRleHRHTE9wZW5HTCk6CisKIDIwMjAtMTEtMTIgIEpvb25naHVuIFBhcmsgIDxqaDcx
OC5wYXJrQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUgYnVpbGQg
d2FybmluZyBiZWxvdyBzaW5jZSByMjY5NzUzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCBhMTdjZDc1
NTllOWYzNmQ5YTViNTI3ZTQ0M2VmOTAzMDE5MTFlZTJmLi45YTg3NjkzZGExNzk5OGY3YTZiMjgy
ZGFiZmQxZDcxZmVjN2I1NjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtNzExLDcgKzcxMSw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpjcmVhdGUoQ2FuCiAgICAgfQogCiAgICAgYXV0byBjb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KTsKLSAg
ICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAg
aWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGlmIChjYW52YXNFbGVtZW50KSB7CiAgICAgICAgICAg
ICBjYW52YXNFbGVtZW50LT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwKICAgICAgICAgICAg
ICAgICBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6WWVzLCAiQ291
bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOwpAQCAtNDM0OSw5ICs0MzQ5LDEwIEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBpeGVscyhHQ0dMaW50IHgsIEdD
R0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoCiAgICAgdm9pZCogZGF0YSA9IHBpeGVscy5iYXNlQWRk
cmVzcygpOwogCiAjaWYgVVNFKEFOR0xFKQotICAgICAgICBHQ0dMc2l6ZWkgbGVuZ3RoLCBjb2x1
bW5zLCByb3dzOwotICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xFKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwgJmxl
bmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CisgICAgR0NHTHNpemVpIGxlbmd0
aCA9IDA7CisgICAgR0NHTHNpemVpIGNvbHVtbnMgPSAwOworICAgIEdDR0xzaXplaSByb3dzID0g
MDsKKyAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5yZWFkblBpeGVsc1JvYnVzdEFOR0xF
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLmJ5dGVMZW5ndGgoKSwg
Jmxlbmd0aCwgJmNvbHVtbnMsICZyb3dzLCBkYXRhLCBmYWxzZSk7CiAjZWxzZQogICAgIGlmICht
X2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCkucmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMuYnl0ZUxlbmd0aCgpLCBkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0V4dGVuc2lvbnNHTEFOR0xFLmNwcAppbmRleCA0
YjRkZmJiM2Y3M2M1ZjJkMjdiZjE3ZjkyNTU5YTZmODdhYzU1ZDJiLi4xM2ZhZjVkYjY0ZmZiMjg2
YmU2YWQ5NTc5NTA5NWZjYzkzZjMzMzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hbmdsZS9FeHRlbnNpb25zR0xBTkdMRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYW5nbGUvRXh0ZW5zaW9uc0dMQU5HTEUuY3BwCkBAIC03
NCw5ICs3NCwxMSBAQCBFeHRlbnNpb25zR0xBTkdMRTo6fkV4dGVuc2lvbnNHTEFOR0xFKCkgPSBk
ZWZhdWx0OwogCiBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAg
ICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7CisgICAgICAgIGlmICgh
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKLQorICAgIH0KICAg
ICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7CiB9CiAKQEAgLTg0LDcgKzg2LDggQEAg
dm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVh
ZHkpLgogICAgIGlmIChtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSAmJiAh
bV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGdsOjpSZXF1ZXN0RXh0
ZW5zaW9uQU5HTEUobmFtZS5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1fZW5hYmxlZEV4dGVu
c2lvbnMuYWRkKG5hbWUpOwogCkBAIC0xMDcsNyArMTEwLDkgQEAgaW50IEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKIAogU3RyaW5nIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm1HTE9iamVjdCBzaGFk
ZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KwogICAgIGludCBzb3VyY2VMZW5ndGggPSAwOwogICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYo
c2hhZGVyLCBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFLCAmc291cmNl
TGVuZ3RoKTsKICAgICBpZiAoIXNvdXJjZUxlbmd0aCkKQEAgLTE2MSwxOSArMTY2LDI1IEBAIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtaXZFWFQoR0NHTHVpbnQsIGludCwgR0NH
THNpemVpLCBpbnQgKikKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmJsaXRGcmFtZWJ1ZmZlcihs
b25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgw
LCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ss
IHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewogICAgIC8vIEZJWE1FOiBjb25zaWRlciBhZGRpbmcg
c3VwcG9ydCBmb3IgQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUuCi0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGl0RnJhbWVidWZmZXJBTkdM
RShzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEs
IG1hc2ssIGZpbHRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBz
YW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xF
KHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiBQ
bGF0Zm9ybUdMT2JqZWN0IEV4dGVuc2lvbnNHTEFOR0xFOjpjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1
aW50IGFycmF5ID0gMDsKICAgICBnbDo6R2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CiAg
ICAgcmV0dXJuIGFycmF5OwpAQCAtMTg0LDcgKzE5NSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYg
KCFhcnJheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsK
IH0KIApAQCAtMTkzLDEzICsyMDYsMTcgQEAgR0NHTGJvb2xlYW4gRXh0ZW5zaW9uc0dMQU5HTEU6
OmlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKICAgICBpZiAoIWFycmF5
KQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1ZlcnRleEFycmF5T0VT
KGFycmF5KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6YmluZFZlcnRleEFycmF5T0VT
KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOwogfQogCkBA
IC0yMjgsMjUgKzI0NSwzMyBAQCBib29sIEV4dGVuc2lvbnNHTEFOR0xFOjpzdXBwb3J0c0V4dGVu
c2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdC
dWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdCdWZmZXJzRVhU
KG4sIGJ1ZnMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpkcmF3QXJyYXlzSW5zdGFu
Y2VkKEdDR0xlbnVtIG1vZGUsIEdDR0xpbnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCwgR0NHTHNp
emVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQs
IHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIGxv
bmcgbG9uZyBvZmZzZXQsIEdDR0xzaXplaSBwcmltY291bnQpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRB
TkdMRShtb2RlLCBjb3VudCwgdHlwZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSksIHByaW1jb3VudCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9u
c0dMQU5HTEU6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0NHTHVpbnQgaW5kZXgsIEdDR0x1aW50IGRp
dmlzb3IpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgsIGRpdmlzb3IpOwogfQogCkBAIC0y
NzEsOTcgKzI5NiwxMjkgQEAgR0NHTGVudW0gRXh0ZW5zaW9uc0dMQU5HTEU6OmFkanVzdFdlYkdM
MVRleHR1cmVJbnRlcm5hbEZvcm1hdChHQ0dMZW51bSBpbnRlcm5hbGYKIC8vIEdMX0FOR0xFX3Jv
YnVzdF9jbGllbnRfbWVtb3J5CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29sZWFudlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICps
ZW5ndGgsIEdDR0xib29sZWFuICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6R2V0Qm9vbGVhbnZSb2J1c3RBTkdMRShwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVm
ZmVyUGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1l
LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykK
IHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6Okdl
dEJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRGbG9hdHZSb2J1
c3RBTkdMRShHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVu
Z3RoLCBHQ0dMZmxvYXQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRGbG9hdHZSb2J1c3RBTkdMRShwbmFtZSwgYnVmU2l6ZSwg
bGVuZ3RoLCBkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VydlJv
YnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICps
ZW5ndGgsIEdDR0xpbnQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VydlJvYnVzdEFOR0xFKHBuYW1lLCBidWZTaXpl
LCBsZW5ndGgsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRQcm9ncmFt
aXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtaXZS
b2J1c3RBTkdMRShwcm9ncmFtLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdlJvYnVz
dEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNoYWRlcml2Um9idXN0QU5HTEUoR0NH
THVpbnQgc2hhZGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXpl
aSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRTaGFkZXJpdlJvYnVzdEFOR0xFKHNoYWRlciwg
cG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xB
TkdMRTo6Z2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xl
bnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9h
dCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6R2V0VGV4UGFyYW1ldGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRl
eFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwg
R0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRU
ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
cGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWZ2Um9idXN0
QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VW5pZm9ybWZ2Um9idXN0QU5H
TEUocHJvZ3JhbSwgbG9jYXRpb24sIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VW5pZm9ybWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJv
Z3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgs
IEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9u
LCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OmdldFZlcnRleEF0dHJpYmZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBu
YW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFy
YW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0VmVydGV4QXR0cmliZnZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0
cmliaXZSb2J1c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXpl
aSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VmVydGV4QXR0
cmliaXZSb2J1c3RBTkdMRShpbmRleCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsK
IH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcnZSb2J1
c3RBTkdMRShHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXpl
LCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBvaW50ZXIpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJQb2ludGVy
dlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwb2ludGVyKTsKIH0K
IAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6cmVhZFBpeGVsc1JvYnVzdEFOR0xFKGludCB4LCBp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQs
IEdDR0xlbnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NH
THNpemVpICpjb2x1bW5zLCBHQ0dMc2l6ZWkgKnJvd3MsIHZvaWQgKnBpeGVscykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRQaXhlbHNS
b2J1c3RBTkdMRSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIGxl
bmd0aCwgY29sdW1ucywgcm93cywgcGl4ZWxzKTsKIH0KIApAQCAtMzY5LDIwMiArNDI2LDI2OCBA
QCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBpbnQgbGV2ZWwsIGludCBpbgogewogICAgIGlmICghbV9jb250ZXh0LT5tX2lzRm9y
V2ViR0wyKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IGFkanVzdFdlYkdMMVRleHR1cmVJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlKTsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleEltYWdlMkRSb2J1c3RBTkdM
RSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OnRleFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFyYW1l
dGVyZnZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0xlbnVt
IHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50
ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpUZXhQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHRhcmdldCwgcG5hbWUsIGJ1ZlNpemUs
IHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnRleFN1YkltYWdlMkRSb2J1
c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zm
c2V0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwg
R0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFN1
YkltYWdlMkRSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGJ1ZlNpemUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmNvbXByZXNzZWRUZXhJbWFnZTJEUm9idXN0QU5HTEUoR0NHTGVudW0g
dGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lk
dGgsIEdDR0xzaXplaSBoZWlnaHQsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIEdD
R0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkRSb2J1
c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NH
THNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBHQ0dM
c2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRUZXhTdWJJbWFnZTJEUm9i
dXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIGJ1ZlNpemUsIGRhdGEpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpjb21wcmVzc2VkVGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
aW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgsIGludCBib3JkZXIsIEdDR0xzaXplaSBpbWFn
ZVNpemUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleElt
YWdlM0RSb2J1c3RBTkdMRSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBidWZTaXplLCBkYXRhKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6Y29tcHJlc3NlZFRleFN1YkltYWdlM0RSb2J1c3RBTkdMRShH
Q0dMZW51bSB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBpbnQg
em9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVw
dGgsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTHNpemVpIGltYWdlU2l6ZSwgR0NHTHNpemVpIGJ1ZlNp
emUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgYnVmU2l6ZSwgZGF0YSk7CiB9CiAKIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6dGV4SW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgaW50
IGxldmVsLCBpbnQgaW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTHNpemVpIGRlcHRoLCBpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xl
bnVtIHR5cGUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpUZXhJbWFnZTNE
Um9idXN0QU5HTEUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgYnVmU2l6ZSwgcGl4ZWxzKTsKIH0KIAogdm9p
ZCBFeHRlbnNpb25zR0xBTkdMRTo6dGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKEdDR0xlbnVtIHRh
cmdldCwgaW50IGxldmVsLCBpbnQgeG9mZnNldCwgaW50IHlvZmZzZXQsIGludCB6b2Zmc2V0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQsIEdDR0xzaXplaSBkZXB0aCwgR0NHTGVu
dW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VGV4U3ViSW1hZ2UzRFJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGJ1ZlNp
emUsIHBpeGVscyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5aXZSb2J1
c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6
ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5aXZSb2J1c3RBTkdM
RSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0
ZW5zaW9uc0dMQU5HTEU6OmdldFF1ZXJ5T2JqZWN0dWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdlJvYnVzdEFOR0xFKGlkLCBwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRC
dWZmZXJQb2ludGVydlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgdm9pZCAqKnBhcmFtcykKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJ1
ZmZlclBvaW50ZXJ2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBw
YXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJbnRlZ2VyaV92Um9idXN0
QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUs
IEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcmlfdlJvYnVzdEFOR0xF
KHRhcmdldCwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OmdldEludGVybmFsZm9ybWF0aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlcm5hbGZvcm1h
dGl2Um9idXN0QU5HTEUodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIGxl
bmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0VmVydGV4QXR0
cmliSWl2Um9idXN0QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRleEF0
dHJpYklpdlJvYnVzdEFOR0xFKGluZGV4LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRWZXJ0ZXhBdHRyaWJJdWl2Um9idXN0
QU5HTEUoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRWZXJ0ZXhBdHRyaWJJdWl2Um9i
dXN0QU5HTEUoaW5kZXgsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZv
aWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShHQ0dMdWludCBw
cm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0
aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm11aXZSb2J1c3RBTkdMRShwcm9ncmFtLCBsb2Nh
dGlvbiwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHByb2dyYW0s
IEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRBY3RpdmVVbmlmb3Jt
QmxvY2tpdlJvYnVzdEFOR0xFKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRJ
bnRlZ2VyNjR2Um9idXN0QU5HTEUoR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBH
Q0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpkYXRhKQogewotICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0SW50ZWdlcjY0dlJvYnVzdEFOR0xF
KHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KGRhdGEp
KTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0SW50ZWdlcjY0aV92Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNpemVpIGJ1ZlNpemUsIEdD
R0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50NjQgKmRhdGEpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRJbnRlZ2VyNjRpX3ZSb2J1c3RBTkdM
RSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2
NCo+KGRhdGEpKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0QnVmZmVyUGFyYW1l
dGVyaTY0dlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludDY0ICpwYXJhbXMpCiB7Ci0g
ICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCdWZm
ZXJQYXJhbWV0ZXJpNjR2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3Ro
LCByZWludGVycHJldF9jYXN0PEdMaW50NjQqPihwYXJhbXMpKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zR0xBTkdMRTo6c2FtcGxlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxl
ciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJh
bSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OlNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBw
YXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OnNhbXBsZXJQYXJhbWV0ZXJmdlJv
YnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgY29uc3QgR0NHTGZsb2F0ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xF
KHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBwYXJhbSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dM
QU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJhbWV0ZXJpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBu
YW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5H
TEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJmdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xm
bG9hdCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcmZ2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5h
bWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBH
Q0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpHZXRGcmFtZWJ1ZmZlclBhcmFtZXRlcml2Um9idXN0QU5HTEUodGFyZ2V0
LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRQcm9ncmFtSW50ZXJmYWNlaXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFt
LCBHQ0dMZW51bSBwcm9ncmFtSW50ZXJmYWNlLCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1
ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtSW50ZXJm
YWNlaXZSb2J1c3RBTkdMRShwcm9ncmFtLCBwcm9ncmFtSW50ZXJmYWNlLCBwbmFtZSwgYnVmU2l6
ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRCb29s
ZWFuaV92Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMdWludCBpbmRleCwgR0NHTHNp
emVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMYm9vbGVhbiAqZGF0YSkKIHsKLSAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEJvb2xl
YW5pX3ZSb2J1c3RBTkdMRSh0YXJnZXQsIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIGRhdGEpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRNdWx0aXNhbXBsZWZ2Um9idXN0QU5HTEUo
R0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNp
emVpICpsZW5ndGgsIEdDR0xmbG9hdCAqdmFsKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0TXVsdGlzYW1wbGVmdlJvYnVzdEFOR0xFKHBu
YW1lLCBpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB2YWwpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNH
TEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcml2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0
LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFRleExldmVsUGFyYW1ldGVyaXZSb2J1c3RBTkdM
RSh0YXJnZXQsIGxldmVsLCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJhbXMpOwogfQogCiB2
b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRUZXhMZXZlbFBhcmFtZXRlcmZ2Um9idXN0QU5HTEUo
R0NHTGVudW0gdGFyZ2V0LCBpbnQgbGV2ZWwsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVm
U2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0VGV4TGV2ZWxQYXJh
bWV0ZXJmdlJvYnVzdEFOR0xFKHRhcmdldCwgbGV2ZWwsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgs
IHBhcmFtcyk7CiB9CiAKIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0UG9pbnRlcnZSb2J1
c3RBTkdMRVJvYnVzdEFOR0xFKEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NH
THNpemVpICpsZW5ndGgsIHZvaWQgKipwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQb2ludGVydlJvYnVzdEFOR0xFUm9idXN0
QU5HTEUocG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIApAQCAtNTgxLDcgKzcw
NCw5IEBAIHN0YXRpYyB2b2lkIHdpcGVBbHBoYUNoYW5uZWxGcm9tUGl4ZWxzKGludCB3aWR0aCwg
aW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6
OnJlYWRuUGl4ZWxzUm9idXN0QU5HTEUoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdD
R0xzaXplaSBoZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVp
IGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMc2l6ZWkgKmNvbHVtbnMsIEdDR0xzaXpl
aSAqcm93cywgdm9pZCAqZGF0YSwgYm9vbCByZWFkaW5nVG9QaXhlbEJ1ZmZlck9iamVjdCkKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gRklYTUU6
IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhl
ZCwgaS5lLiwKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBk
b25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBnbDo6Rmx1c2goKTsKQEAgLTYxNiw4NiAr
NzQxLDExNCBAQCB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpyZWFkblBpeGVsc1JvYnVzdEFOR0xF
KGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQwogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpnZXRuVW5pZm9ybWZ2Um9idXN0QU5HTEUoR0NHTHVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0xmbG9hdCAqcGFy
YW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0blVuaWZvcm1mdlJvYnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBs
ZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3Jt
aXZSb2J1c3RBTkdMRShHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0blVuaWZvcm1pdlJv
YnVzdEFOR0xFKHByb2dyYW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldG5Vbmlmb3JtdWl2Um9idXN0QU5HTEUoR0NH
THVpbnQgcHJvZ3JhbSwgaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRuVW5pZm9ybXVpdlJvYnVzdEFOR0xFKHByb2dy
YW0sIGxvY2F0aW9uLCBidWZTaXplLCBsZW5ndGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5z
aW9uc0dMQU5HTEU6OnRleFBhcmFtZXRlcklpdlJvYnVzdEFOR0xFKEdDR0xlbnVtIHRhcmdldCwg
R0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpU
ZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBwYXJhbXMp
OwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjp0ZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5H
TEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTHNpemVpIGJ1ZlNpemUsIGNv
bnN0IEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpUZXhQYXJhbWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBw
bmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zR0xBTkdMRTo6Z2V0
VGV4UGFyYW1ldGVySWl2Um9idXN0QU5HTEUoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFt
ZSwgR0NHTHNpemVpIGJ1ZlNpemUsIEdDR0xzaXplaSAqbGVuZ3RoLCBHQ0dMaW50ICpwYXJhbXMp
CiB7Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpH
ZXRUZXhQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRSh0YXJnZXQsIHBuYW1lLCBidWZTaXplLCBsZW5n
dGgsIHBhcmFtcyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFRleFBhcmFtZXRl
ckl1aXZSb2J1c3RBTkdMRShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6
ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdDR0x1aW50ICpwYXJhbXMpCiB7Ci0gICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRUZXhQYXJh
bWV0ZXJJdWl2Um9idXN0QU5HTEUodGFyZ2V0LCBwbmFtZSwgYnVmU2l6ZSwgbGVuZ3RoLCBwYXJh
bXMpOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpzYW1wbGVyUGFyYW1ldGVySWl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZT
aXplLCBjb25zdCBHQ0dMaW50ICpwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlNhbXBsZXJQYXJhbWV0ZXJJaXZSb2J1c3RBTkdMRShz
YW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFO
R0xFOjpzYW1wbGVyUGFyYW1ldGVySXVpdlJvYnVzdEFOR0xFKEdDR0x1aW50IHNhbXBsZXIsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgY29uc3QgR0NHTHVpbnQgKnBhcmFtKQog
ewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U2Ft
cGxlclBhcmFtZXRlckl1aXZSb2J1c3RBTkdMRShzYW1wbGVyLCBwbmFtZSwgYnVmU2l6ZSwgcGFy
YW0pOwogfQogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRTYW1wbGVyUGFyYW1ldGVySWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTGludCAqcGFyYW1zKQogewotICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFt
ZXRlcklpdlJvYnVzdEFOR0xFKHNhbXBsZXIsIHBuYW1lLCBidWZTaXplLCBsZW5ndGgsIHBhcmFt
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMQU5HTEU6OmdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2
Um9idXN0QU5HTEUoR0NHTHVpbnQgc2FtcGxlciwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBi
dWZTaXplLCBHQ0dMc2l6ZWkgKmxlbmd0aCwgR0NHTHVpbnQgKnBhcmFtcykKIHsKLSAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNhbXBsZXJQYXJh
bWV0ZXJJdWl2Um9idXN0QU5HTEUoc2FtcGxlciwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFy
YW1zKTsKIH0KIAogCiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdGl2Um9i
dXN0QU5HTEUoR0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwg
R0NHTHNpemVpICpsZW5ndGgsIEdDR0xpbnQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0aXZSb2J1c3RB
TkdMRShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcGFyYW1zKTsKIH0KIAogdm9pZCBFeHRl
bnNpb25zR0xBTkdMRTo6Z2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoR0NHTHVpbnQgaWQs
IEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVpICpsZW5ndGgsIEdD
R0xpbnQ2NCAqcGFyYW1zKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0UXVlcnlPYmplY3RpNjR2Um9idXN0QU5HTEUoaWQsIHBuYW1lLCBi
dWZTaXplLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQ2NCo+KHBhcmFtcykpOwogfQog
CiB2b2lkIEV4dGVuc2lvbnNHTEFOR0xFOjpnZXRRdWVyeU9iamVjdHVpNjR2Um9idXN0QU5HTEUo
R0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMc2l6ZWkgYnVmU2l6ZSwgR0NHTHNpemVp
ICpsZW5ndGgsIEdDR0x1aW50NjQgKnBhcmFtcykKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFF1ZXJ5T2JqZWN0dWk2NHZSb2J1c3RBTkdM
RShpZCwgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ2NCo+
KHBhcmFtcykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hbmdsZS9HcmFwaGljc0NvbnRleHRHTEFOR0xFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCmluZGV4IDRj
MjI0MjIxNTgxNzY2YTdjNGFlN2E2ZTY3ZjdjZTZlNGJhZjFlYWIuLjUwMDk4OWNiYTk2NWQ3Y2Rj
OTlkMTU1MDYwNTk4Zjc3ZWEwNDViNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2FuZ2xlL0dyYXBoaWNzQ29udGV4dEdMQU5HTEUu
Y3BwCkBAIC0xODUsMTEgKzE4NSwxMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpy
ZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICBHTGludCBzYW1wbGVDb3Vu
dCA9IHN0ZDo6bWluKDQsIG1heFNhbXBsZUNvdW50KTsKICAgICAgICAgZ2w6OkJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIGdsOjpCaW5k
UmVuZGVyYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgZ2V0RXh0ZW5zaW9ucygpLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
TF9SRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5H
TEUoR0xfUkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfUkVOREVSQlVGRkVSLCBtX211bHRp
c2FtcGxlQ29sb3JCdWZmZXIpOwogICAgICAgICBpZiAoYXR0cnMuc3RlbmNpbCB8fCBhdHRycy5k
ZXB0aCkgewogICAgICAgICAgICAgZ2w6OkJpbmRSZW5kZXJidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdldEV4dGVu
c2lvbnMoKS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xfUkVOREVSQlVGRkVSLCBz
YW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMX1JF
TkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIC8vIFdlYkdMIDEuMCdzIHJ1bGVzIHN0YXRlIHRoYXQg
Y29tYmluZWQgZGVwdGgvc3RlbmNpbCByZW5kZXJidWZmZXJzCiAgICAgICAgICAgICAvLyBoYXZl
IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBzeW50aGV0aWMgREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
IHBvaW50LgogICAgICAgICAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPT0gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMpCkBAIC0zMjQsMTMg
KzMyNCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNvbHZlTXVsdGlzYW1w
bGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlYwogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Z2V0SW50ZWdlcnYoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIHN3aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIE1BWF9U
RVhUVVJFX1NJWkU6CiAgICAgICAgIGdsOjpHZXRJbnRlZ2VydihNQVhfVEVYVFVSRV9TSVpFLCB2
YWx1ZSk7CkBAIC0zNjMsMTMgKzM2NywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRJbnRlZ2VydihHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1
aW50IGluZGV4LCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6R2V0SW50ZWdlcmlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDR0xlbnVtIHNoYWRl
clR5cGUsIEdDR0xlbnVtIHByZWNpc2lvblR5cGUsIEdDR0xpbnQqIHJhbmdlLCBHQ0dMaW50KiBw
cmVjaXNpb24pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgcHJlY2lzaW9uKTsK
IH0KIApAQCAtMzg2LDEzICszOTQsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnUKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVwdGhSYW5nZShHQ0dMY2xhbXBmIHpOZWFyLCBH
Q0dMY2xhbXBmIHpGYXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlcHRoUmFu
Z2VmKHN0YXRpY19jYXN0PGZsb2F0Pih6TmVhciksIHN0YXRpY19jYXN0PGZsb2F0Pih6RmFyKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1w
ZiBkZXB0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJEZXB0aGYoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGRlcHRoKSk7CiB9CiAKQEAgLTQwNyw3ICs0MTksOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZWFkUGl4ZWxzKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsCiB7CiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2gg
Y2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKICAgICAvLyBhbGwgcHJl
dmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVs
cy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Rmx1c2goKTsKICAgICBhdXRvIGF0dHJz
ID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1ZmZlclRhcmdldCA9
IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFNRUJVRkZFUiA6IEdy
YXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKQEAgLTUyMiw3ICs1MzYsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwcmVwYXJlVGV4dHVyZSgpCiAgICAgaWYgKG1fbGF5ZXJD
b21wb3NpdGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBw
cmVwYXJlVGV4dHVyZUltcGwoKTsKIH0KIApAQCAtNTcyLDcgKzU4OCw5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBp
eGVscywgaW50IHBpCiAgICAgaWYgKHBpeGVsc1NpemUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3Vy
cmVudEhlaWdodCAqIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
CiAgICAgR0NHTGVudW0gZnJhbWVidWZmZXJUYXJnZXQgPSBtX2lzRm9yV2ViR0wyID8gR3JhcGhp
Y3NDb250ZXh0R0w6OlJFQURfRlJBTUVCVUZGRVIgOiBHcmFwaGljc0NvbnRleHRHTDo6RlJBTUVC
VUZGRVI7CiAKQEAgLTYyOCw5ICs2NDYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0R0woKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1
cnJlbnRIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM4LDE1ICs2NTMsMTggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBG
SVhNRTogdGhlc2UgbWF5IGNhbGwgbWFrZUNvbnRleHRDdXJyZW50IGFnYWluLCB3ZSBuZWVkIHRv
IGRvIHRoaXMgYmVmb3JlIGNoYW5naW5nIHRoZSBzaXplLgorICAgIG1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCiAgICAgbWFya0Nv
bnRleHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3Vy
cmVudEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIHZhbGlkYXRlQXR0cmlidXRlcygp
OwotCiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9U
RVNULCBHTF9GQUxTRSk7CiAgICAgVGVtcG9yYXJ5QU5HTEVTZXR0aW5nIHNjb3BlZERpdGhlcihH
TF9ESVRIRVIsIEdMX0ZBTFNFKTsKICAgICBTY29wZWRSZXNldEJ1ZmZlckJpbmRpbmcgc2NvcGVk
UGl4ZWxVbnBhY2tCdWZmZXJSZXNldChtX2lzRm9yV2ViR0wyLCBHTF9QSVhFTF9VTlBBQ0tfQlVG
RkVSX0JJTkRJTkcsIEdMX1BJWEVMX1VOUEFDS19CVUZGRVIpOwpAQCAtNjY2LDExICs2ODQsMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCiAgICAgZ2w6OkNvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFKTsKICAgICBpZiAoYXR0cnMuZGVwdGgpIHsKICAgICAgICAgZ2w6OkdldEZsb2F0dihHTF9E
RVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6Y2xlYXJEZXB0aCgxKTsKKyAgICAgICAgZ2w6OkNsZWFyRGVwdGhmKDEuMGYpOwog
ICAgICAgICBnbDo6R2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsK
ICAgICAgICAgZ2w6OkRlcHRoTWFzayhHTF9UUlVFKTsKICAgICAgICAgY2xlYXJNYXNrIHw9IEdM
X0RFUFRIX0JVRkZFUl9CSVQ7CiAgICAgfQorCiAgICAgaWYgKGF0dHJzLnN0ZW5jaWwpIHsKICAg
ICAgICAgZ2w6OkdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5j
aWwpOwogICAgICAgICBnbDo6Q2xlYXJTdGVuY2lsKDApOwpAQCAtNjg2LDcgKzcwNSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogICAgIGdsOjpDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFy
Q29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwogICAgIGdsOjpDb2xvck1hc2soY29sb3JNYXNrWzBd
LCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKICAgICBpZiAoYXR0
cnMuZGVwdGgpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgo
Y2xlYXJEZXB0aCk7CisgICAgICAgIGdsOjpDbGVhckRlcHRoZihjbGVhckRlcHRoKTsKICAgICAg
ICAgZ2w6OkRlcHRoTWFzayhkZXB0aE1hc2spOwogICAgIH0KICAgICBpZiAoYXR0cnMuc3RlbmNp
bCkgewpAQCAtNzEzLDcgKzczMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjphY3RpdmVUZXh0dXJlKEdDR0xlbnVtIHRleHR1cmUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgbV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmU7CiAgICAgZ2w6OkFj
dGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CkBAIC03MjIsMjYgKzc0MywzNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFt
LCBQbGF0Zm9ybUdMTwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVy
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QXR0YWNoU2hhZGVyKHByb2dyYW0sIHNo
YWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6QmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFtZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEdMdWlu
dCBmYm87CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgZmJvID0gYnVmZmVyOwpAQCAtNzYwLDEw
NyArNzg5LDE0MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZm
ZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Qmlu
ZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5zZXRC
b3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVUZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsK
ICAgICBnbDo6QmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xvcihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBn
cmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dMY2xhbXBmIGFscGhhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCbGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBt
b2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCbGVuZEVxdWF0aW9uKG1vZGUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVudW0gbW9kZUFscGhhKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVu
dW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3RvcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6QmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmNTZXBhcmF0ZShHQ0dMZW51bSBzcmNSR0IsIEdDR0xlbnVt
IGRzdFJHQiwgR0NHTGVudW0gc3JjQWxwaGEsIEdDR0xlbnVtIGRzdEFscGhhKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwg
c3JjQWxwaGEsIGRzdEFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
YnVmZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBHQ0dMZW51bSB1
c2FnZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QnVmZmVyRGF0YSh0YXJnZXQs
IHNpemUsIDAsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YnVm
ZmVyRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhLCBHQ0dMZW51bSB1c2FnZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6YnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIg
b2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6QnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwg
ZGF0YSk7CiB9CiAKIHZvaWQqIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5n
ZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgbGVuZ3Ro
LCBHQ0dMYml0ZmllbGQgYWNjZXNzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAg
ICAgcmV0dXJuIGdsOjpNYXBCdWZmZXJSYW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nl
c3MpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZm
ZXIoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAg
IHJldHVybiBnbDo6VW5tYXBCdWZmZXIodGFyZ2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29weUJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gcmVhZFRhcmdldCwgR0NHTGVu
dW0gd3JpdGVUYXJnZXQsIEdDR0xpbnRwdHIgcmVhZE9mZnNldCwgR0NHTGludHB0ciB3cml0ZU9m
ZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6
OkNvcHlCdWZmZXJTdWJEYXRhKHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFkT2Zmc2V0LCB3
cml0ZU9mZnNldCwgc2l6ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Omdl
dEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dMaW50KiBwYXJhbXMpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldEludGVybmFsZm9ybWF0aXYodGFyZ2V0
LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlRleFN0b3JhZ2UyRCh0YXJn
ZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTg2OCw0NiArOTMx
LDYwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UzRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZlbHMsIEdDCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSwgVmVjdG9yPEdD
R0xpbnQ+JiBwYXJhbXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogCiAgICAgZ2w6OkdldEFjdGl2ZVVuaWZvcm1zaXYocHJvZ3JhbSwgdW5pZm9ybUluZGlj
ZXMuc2l6ZSgpLCB1bmlmb3JtSW5kaWNlcy5kYXRhKCksIHBuYW1lLCBwYXJhbXMuZGF0YSgpKTsK
IH0KIAogR0NHTGVudW0gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNoZWNrRnJhbWVidWZmZXJT
dGF0dXMoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09Q
RVJBVElPTjsKKwogICAgIHJldHVybiBnbDo6Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckNvbG9yKEdDR0xjbGFt
cGYgciwgR0NHTGNsYW1wZiBnLCBHQ0dMY2xhbXBmIGIsIEdDR0xjbGFtcGYgYSkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6Q2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXIoR0NHTGJpdGZpZWxkIG1hc2spCiB7Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyKG1hc2spOwogICAgIGNoZWNrR1BVU3Rh
dHVzKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyU3RlbmNpbChH
Q0dMaW50IHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNsZWFyU3RlbmNpbChz
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29sb3JNYXNrKEdDR0xib29s
ZWFuIHJlZCwgR0NHTGJvb2xlYW4gZ3JlZW4sIEdDR0xib29sZWFuIGJsdWUsIEdDR0xib29sZWFu
IGFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDb2xvck1hc2socmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFk
ZXIpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIFdlIG5lZWQgdGhlIEFOR0xFX3RleHR1
cmVfcmVjdGFuZ2xlIGV4dGVuc2lvbiB0byBzdXBwb3J0IElPU3VyZmFjZQogICAgIC8vIGJhY2ti
dWZmZXJzLCBidXQgd2UgZG9uJ3Qgd2FudCBpdCBleHBvc2VkIHRvIFdlYkdMIHVzZXIgc2hhZGVy
cy4KICAgICAvLyBUZW1wb3JhcmlseSBkaXNhYmxlIGl0IGR1cmluZyBzaGFkZXIgY29tcGlsYXRp
b24uCkBAIC05MTksMTMgKzk5NiwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b21waWxlU2hhZGVyKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Y29tcGlsZVNoYWRlckRpcmVjdChQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikK
IHsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29t
cGlsZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpj
b3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKICAgICBHQ0dMZW51bSBmcmFtZWJ1
ZmZlclRhcmdldCA9IG1faXNGb3JXZWJHTDIgPyBHcmFwaGljc0NvbnRleHRHTDo6UkVBRF9GUkFN
RUJVRkZFUiA6IEdyYXBoaWNzQ29udGV4dEdMOjpGUkFNRUJVRkZFUjsKIApAQCAtOTQwLDcgKzEw
MjEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDRwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWws
IEdDR0xpbnQgeG9mZnNldCwgR0NHTGludCB5b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIGF1dG8gYXR0cnMgPSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIEdDR0xlbnVtIGZy
YW1lYnVmZmVyVGFyZ2V0ID0gbV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFE
X0ZSQU1FQlVGRkVSIDogR3JhcGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSOwogCkBAIC05NTUs
MTkgKzEwMzgsMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1Yklt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLAogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpjdWxsRmFjZShHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGdsOjpDdWxsRmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZGVwdGhGdW5jKEdDR0xlbnVtIGZ1bmMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkRlcHRoRnVuYyhmdW5jKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGVwdGhNYXNrKEdDR0xib29sZWFuIGZsYWcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkRlcHRoTWFzayhmbGFnKTsKIH0KIApAQCAtOTc1LDgyICsxMDY0LDEwOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBwcm9ncmFtLCBQbGF0Zm9ybUdMTwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NF
UlQoc2hhZGVyKTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGV0YWNoU2hhZGVyKHBy
b2dyYW0sIHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2Fi
bGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEaXNhYmxl
KGNhcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQ0dMdWludCBpbmRleCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5cyhHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBH
Q0dMc2l6ZWkgY291bnQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdBcnJh
eXMobW9kZSwgZmlyc3QsIGNvdW50KTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3RWxlbWVudHMoR0NHTGVudW0gbW9kZSwgR0NH
THNpemVpIGNvdW50LCBHQ0dMZW51bSB0eXBlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbDo6RHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7
CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlKEdDR0xlbnVtIGNhcCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
RW5hYmxlKGNhcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmZpbmlzaCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OkZpbmlzaCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmbHVzaCgp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZsdXNoKCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBQ
bGF0Zm9ybUdMT2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
RnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0
YXJnZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NH
TGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIEdDR0xpbnQgbGV2ZWwp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkZyYW1lYnVmZmVyVGV4dHVyZTJEKHRh
cmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CiAgICAgbV9zdGF0
ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyb250RmFjZShHQ0dMZW51bSBtb2Rl
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGcm9udEZhY2UobW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdlbmVyYXRlTWlwbWFwKEdDR0xlbnVtIHRh
cmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2VuZXJhdGVNaXBtYXAodGFy
Z2V0KTsKIH0KIApAQCAtMTA2MCw3ICsxMTc1LDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0wK
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4
QXR0cmlidXRlU2l6ZSA9IDA7CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJ
VkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXplKTsKICAgICBWZWN0b3I8
R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJVkVfQVRUUklCVVRFX01B
WF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KQEAgLTEwODksNyArMTIwNiw5IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7
CiAgICAgZ2w6OkdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RILCAmbWF4VW5pZm9ybVNpemUpOwogCkBAIC0xMTE4LDcgKzEyMzcsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMcwogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CiB9CiAK
QEAgLTExMjcsNyArMTI0OCw5IEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QXR0
cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTCiAgICAgaWYgKCFw
cm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gLTE7CisKIAog
ICAgIHJldHVybiBnbDo6R2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKIH0KQEAgLTExMzksNyArMTI2Miw5IEBAIGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0QXR0cmliTG9jYXRpb25EaXJlY3QoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjCiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9y
TGlzdCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBtb3ZlZEFuRXJy
b3IgPSBmYWxzZTsKIAogICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUg
dG8gYXZvaWQgY3JlYXRpbmcgYSBoYW5nIGlmCkBAIC0xMTY2LDE5ICsxMjkxLDI1IEBAIEdDR0xl
bnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCiAgICAgICAgIHJldHVybiBt
X3N5bnRoZXRpY0Vycm9ycy50YWtlRmlyc3QoKTsKICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9PUEVSQVRJT047CisKICAgICByZXR1cm4gZ2w6OkdldEVycm9yKCk7CiB9CiAK
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIFN0cmluZyhyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbDo6R2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpIaW50KHRhcmdldCwgbW9k
ZSk7CiB9CiAKQEAgLTExODcsMTMgKzEzMTgsMTcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogICAgIGlmICgh
YnVmZmVyKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNFbmFibGVkKGNh
cCk7CiB9CiAKQEAgLTEyMDIsNyArMTMzNyw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAg
ICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyKTsKIH0KIApAQCAtMTIxMSw3ICsxMzQ4LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAg
aWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApA
QCAtMTIyMCw3ICsxMzU5LDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmUKICAgICBpZiAoIXJl
bmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIGdsOjpJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
OwogfQogCkBAIC0xMjI5LDcgKzEzNzAsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKCFzaGFk
ZXIpCiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKwogICAgIHJldHVybiBnbDo6SXNTaGFkZXIoc2hhZGVyKTsKIH0KIApAQCAtMTIzOCw0NCAr
MTM4MSw1OCBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJl
KFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVy
biBnbDo6SXNUZXh0dXJlKHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpMaW5lV2lkdGgod2lkdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJU
KHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpMaW5rUHJvZ3JhbShwcm9n
cmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxTdG9yZWkoR0NH
TGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZsb2F0IHVuaXRz
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpQb2x5Z29uT2Zmc2V0KGZhY3Rvciwg
dW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1wbGVDb3ZlcmFn
ZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OlNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NHTGludCB5LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTEyODMsNyAr
MTQ0MCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNvdXJjZShQbGF0
Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7
CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBDU3RyaW5nJiBzaGFkZXJTb3VyY2VD
U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICBjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2VQdHIg
PSBzaGFkZXJTb3VyY2VDU3RyaW5nLmRhdGEoKTsKQEAgLTEyOTMsMTc4ICsxNDUxLDIzNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIsIGNvbnN0IFN0cmluZwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpz
dGVuY2lsRnVuYyhHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFzaykKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNr
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQ0dMZW51bSBmYWNlLCBHQ0dMZW51bSBmdW5jLCBHQ0dMaW50IHJlZiwgR0NHTHVpbnQgbWFz
aykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6U3RlbmNpbEZ1bmNTZXBhcmF0ZShm
YWNlLCBmdW5jLCByZWYsIG1hc2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpzdGVuY2lsTWFzayhHQ0dMdWludCBtYXNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpTdGVuY2lsTWFzayhtYXNrKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQ0dMZW51bSBmYWNlLCBHQ0dMdWludCBtYXNrKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzdGVuY2lsT3AoR0NHTGVu
dW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wU2VwYXJhdGUoR0NHTGVudW0gZmFj
ZSwgR0NHTGVudW0gZmFpbCwgR0NHTGVudW0gemZhaWwsIEdDR0xlbnVtIHpwYXNzKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6
ZmFpbCwgenBhc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJh
bWV0ZXJmKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCB2YWx1ZSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFyYW1ldGVyZih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleFBhcmFt
ZXRlcmkoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCB2YWx1ZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0xZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlVuaWZvcm0xZihsb2NhdGlvbiwgdjApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtMWZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBj
b25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpV
bmlmb3JtMWZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm0yZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdD
R0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJmKGxv
Y2F0aW9uLCB2MCwgdjEpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlm
b3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQq
IGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAyLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMmZ2KGxvY2F0aW9uLCBz
aXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
ZihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0
IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2YobG9jYXRpb24s
IHYwLCB2MSwgdjIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMZmxvYXQqIGFy
cmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAz
LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXpl
LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00ZihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00
Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtNGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xzaXplaSBzaXplLCBjb25z
dCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGZ2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWkobG9jYXRpb24sIHYwKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCogYXJyYXkpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OlVuaWZvcm0xaXYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xp
bnQgdjAsIEdDR0xpbnQgdjEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZv
cm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6dW5pZm9ybTJpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NH
TGludCogYXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDIuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yaXYobG9jYXRp
b24sIHNpemUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTNpKEdDR0xpbnQgbG9jYXRpb24sIEdDR0xpbnQgdjAsIEdDR0xpbnQgdjEsIEdDR0xpbnQg
djIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zaShsb2NhdGlvbiwg
djAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
aXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLgot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aShHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyLCBHQ0dMaW50
IHYzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGkobG9jYXRpb24s
IHYwLCB2MSwgdjIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5p
Zm9ybTRpdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGludCog
YXJyYXkpCiB7CiAgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDQuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm00aXYobG9jYXRpb24sIHNp
emUsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1h
dHJpeDJmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGgg
bmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGds
OjpVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDNmdihHQ0dMaW50
IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
Q0dMZmxvYXQqIGFycmF5KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5LgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJpeDRmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dM
c2l6ZWkgc2l6ZSwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGFycmF5
KQogewogICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNi4K
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVzZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpVc2VQcm9ncmFtKHByb2dyYW0pOwogfQogCkBAIC0xNDcyLDc5ICsx
Njg2LDEwNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGlu
ZGV4LCBHQ0dMZmxvYXQgdjApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlZlcnRl
eEF0dHJpYjFmKGluZGV4LCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjFmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliMWZ2KGluZGV4LCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBnbDo6VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBp
bmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQg
djAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpWZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgY29u
c3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZlcnRleEF0dHJpYjRmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xm
bG9hdCB2MSwgR0NHTGZsb2F0IHYyLCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OlZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBp
bmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6VmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xp
bnQgc2l6ZSwgR0NHTGVudW0gdHlwZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVp
IHN0cmlkZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Z2w6OlZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0
cmlkZSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zm
c2V0KSkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJ
UG9pbnRlcihHQ0dMdWludCBpbmRleCwgR0NHTGludCBzaXplLCBHQ0dMZW51bSB0eXBlLCBHQ0dM
c2l6ZWkgc3RyaWRlLCBHQ0dMaW50cHRyIG9mZnNldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6VmVydGV4QXR0cmliSVBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgs
IEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4
QXJyYXkoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsK
ICAgICBnbDo6R2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiAgICAgcmV0dXJuIGFycmF5OwpA
QCAtMTU1NCw3ICsxNzk0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRl
VmVydGV4QXJyYXkoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkKIHsKICAgICBpZiAoIWFycmF5KQog
ICAgICAgICByZXR1cm47Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVZlcnRl
eEFycmF5cygxLCAmYXJyYXkpOwogfQogCkBAIC0xNTYyLDUxICsxODA0LDY3IEBAIEdDR0xib29s
ZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmpl
Y3QgYXJyYXkpCiB7CiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNWZXJ0ZXhBcnJh
eShhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhB
cnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGdsOjpCaW5kVmVydGV4QXJyYXkoYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjpnZXRCb29sZWFudihHQ0dMZW51bSBwbmFtZSwgR0NHTGJvb2xlYW4qIHZhbHVlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRCb29sZWFudihwbmFtZSwgdmFsdWUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRCdWZmZXJQYXJhbWV0ZXJp
dihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGbG9h
dHYoR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwogfQogICAgIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0SW50ZWdlcjY0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGlu
dDY0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICAqdmFsdWUgPSAwOwogICAg
IGdsOjpHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVnZXI2NGlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5k
ZXgsIEdDR0xpbnQ2NCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVl
ID0gMDsKICAgICBnbDo6R2V0SW50ZWdlcjY0aV92KHBuYW1lLCBpbmRleCwgdmFsdWUpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGF0dGFjaG1lbnQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
YXR0YWNobWVudCA9PSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpCiAgICAgICAgIGF0dGFjaG1l
bnQgPSBERVBUSF9BVFRBQ0hNRU5UOyAvLyBPciBTVEVOQ0lMX0FUVEFDSE1FTlQsIGVpdGhlciB3
b3Jrcy4KICAgICBnbDo6R2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgdmFsdWUpOwpAQCAtMTYxNCw3ICsxODcyLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoR0NHTGVudW0gdGFyZ2UKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJv
Z3JhbWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQq
IHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRQcm9ncmFtaXYocHJv
Z3JhbSwgcG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMTY0Miw3ICsxOTAyLDkgQEAgU3RyaW5nIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCiAgICAgR0xpbnQgbGVuZ3RoID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAgICAgaWYgKCFsZW5ndGgpCkBA
IC0xNjYxLDcgKzE5MjMsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFBy
b2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgZ2w6OkdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsIHZhbHVl
KTsKIH0KIApAQCAtMTY2OSw3ICsxOTMzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Z2V0U2hhZGVyaXYoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIsIEdDR0xlbnVtIHBuYW0KIHsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRT
aGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKQEAgLTE2NzcsNyArMTk0Myw5IEBA
IFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIAotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKwogICAgIEdMaW50IGxlbmd0aCA9IDA7CiAgICAgZ2w6OkdldFNoYWRl
cml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0
aCkKQEAgLTE2OTgsMzEgKzE5NjYsNDEgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCkKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBw
bmFtZSwgR0NHTGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
R2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRUZXhQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdD
R0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMZmxvYXQqIHZhbHVlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGdsOjpHZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVl
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybWl2KFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTGludCogdmFsdWUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2Nh
dGlvbiwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlm
b3JtdWl2KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgR0NHTGludCBsb2NhdGlvbiwgR0NHTHVp
bnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRVbmlmb3JtdWl2
KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CiB9CiAKQEAgLTE3MzAsMjUgKzIwMDgsMzIgQEAg
R0NHTGludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSwgY28KIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gLTE7CisKICAgICByZXR1cm4gZ2w6OkdldFVuaWZvcm1Mb2NhdGlvbihwcm9n
cmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdD
R0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkdldFZlcnRl
eEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5h
bWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRW
ZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKIH0KIAogR0NHTHNpemVpcHRyIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5k
ZXgsIEdDR0xlbnVtIHBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAwOwogCiAgICAgR0x2b2lk
KiBwb2ludGVyID0gMDsKICAgICBnbDo6R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBu
YW1lLCAmcG9pbnRlcik7CkBAIC0xNzU3LDcgKzIwNDIsOCBAQCBHQ0dMc2l6ZWlwdHIgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwg
R0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdD
R0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hl
biBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFn
ZSBzaXplLgogICAgIGdsOjpUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKQEAgLTE3NjYsMjEgKzIwNTIs
MjcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51
bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEdDR0wKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVp
Z2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6Q29tcHJlc3NlZFRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW1h
Z2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUu
Y3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVs
LCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwgR0NHTHNpemVpIHdpZHRoLCBHQ0dM
c2l6ZWkgaGVpZ2h0LCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlQnVmZmVyKCkKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbDo6R2VuQnVmZmVycygxLCAm
byk7CiAgICAgcmV0dXJuIG87CkBAIC0xNzg4LDcgKzIwODAsOSBAQCBQbGF0Zm9ybUdMT2JqZWN0
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVCdWZmZXIoKQogCiBQbGF0Zm9ybUdMT2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2w6OkdlbkZyYW1lYnVm
ZmVycygxLCAmbyk7CiAgICAgcmV0dXJuIG87CkBAIC0xNzk2LDEzICsyMDkwLDE3IEBAIFBsYXRm
b3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
IAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3Jh
bSgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1
cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2w6OkNyZWF0ZVByb2dy
YW0oKTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBv
ID0gMDsKICAgICBnbDo6R2VuUmVuZGVyYnVmZmVycygxLCAmbyk7CiAgICAgcmV0dXJuIG87CkBA
IC0xODEwLDEzICsyMTA4LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNoYWRlcihHQ0dMZW51bSB0eXBlKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiAwOworCiAgICAgcmV0dXJuIGdsOjpDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01F
TlRfU0hBREVSKSA/IEdMX0ZSQUdNRU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQog
CiBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJl
KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbDo6
R2VuVGV4dHVyZXMoMSwgJm8pOwogICAgIG1fc3RhdGUudGV4dHVyZVNlZWRDb3VudC5hZGQobyk7
CkBAIC0xODI1LDEzICsyMTI3LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVRleHR1cmUoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkZWxldGVCdWZmZXIoUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgZ2w6OkRlbGV0ZUJ1ZmZlcnMoMSwgJmJ1ZmZlcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3Qg
ZnJhbWVidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBmcmFtZWJ1ZmZlciBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBmb3IgZHJhd2luZwogICAgIC8v
IG9wZXJhdGlvbnMgYWZ0ZXIgaXQgZ2V0cyBkZWxldGVkLgogICAgIGlmIChtX2lzRm9yV2ViR0wy
KSB7CkBAIC0xODQ2LDI1ICsyMTUyLDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxldGVQcm9ncmFtKHBy
b2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVSZW5kZXJi
dWZmZXIoUGxhdGZvcm1HTE9iamVjdCByZW5kZXJidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkRlbGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQbGF0Zm9ybUdMT2Jq
ZWN0IHNoYWRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRlU2hhZGVy
KHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVRleHR1
cmUoUGxhdGZvcm1HTE9iamVjdCB0ZXh0dXJlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IG1fc3RhdGUuYm91bmRUZXh0dXJlTWFwLnJlbW92ZUlmKFt0ZXh0dXJlXSAoYXV0byYga2V5VmFs
dWUpIHsKICAgICAgICAgcmV0dXJuIGtleVZhbHVlLnZhbHVlLmZpcnN0ID09IHRleHR1cmU7CiAg
ICAgfSk7CkBAIC0xOTIwLDcgKzIyMzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpkaXNwYXRjaENvbnRleHRDaGFuZ2VkTm90aWZpY2F0aW9uKCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQg
bGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXpl
aSBoZWlnaHQsIEdDR0xpbnQgYm9yZGVyLCBHQ0dMZW51bSBmb3JtYXQsIEdDR0xlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoIW1f
aXNGb3JXZWJHTDIgJiYgbV9leHRlbnNpb25zKQogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IG1f
ZXh0ZW5zaW9ucy0+YWRqdXN0V2ViR0wxVGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9y
bWF0LCBmb3JtYXQsIHR5cGUpOwogICAgIGdsOjpUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxz
KTsKQEAgLTE5MjksMzQgKzIyNDUsNDUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dGV4SW1hZ2UyRERpcmVjdChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsIEcKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBt
b2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xzaXplaSBwcmltY291bnQp
CiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpEcmF3QXJyYXlzSW5zdGFuY2VkKG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICBlbHNlCi0gICAgICAgIGdldEV4dGVu
c2lvbnMoKS5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50
KTsKKyAgICAgICAgZ2w6OkRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291
bnQsIHByaW1jb3VudCk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVtIG1vZGUsIEdD
R0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgR0NHTGludHB0ciBvZmZzZXQsIEdDR0xzaXpl
aSBwcmltY291bnQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgaWYgKG1faXNGb3JXZWJHTDIpCiAgICAgICAgIGdsOjpEcmF3RWxlbWVu
dHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9m
ZnNldCksIHByaW1jb3VudCk7CiAgICAgZWxzZQotICAgICAgICBnZXRFeHRlbnNpb25zKCkuZHJh
d0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIHByaW1jb3VudCk7
CisgICAgICAgIGdsOjpEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlw
ZSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKICAgICBjaGVj
a0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZpc29yKQogeworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX2lz
Rm9yV2ViR0wyKQogICAgICAgICBnbDo6VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7CiAgICAgZWxzZQotICAgICAgICBnZXRFeHRlbnNpb25zKCkudmVydGV4QXR0cmliRGl2aXNv
cihpbmRleCwgZGl2aXNvcik7CisgICAgICAgIGdsOjpWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUo
aW5kZXgsIGRpdmlzb3IpOwogfQogCiBHQ0dMdWludCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
Z2V0VW5pZm9ybUJsb2NrSW5kZXgoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIHVuaWZvcm1CbG9ja05hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0lOREVYOworCiAgICAgcmV0dXJuIGdsOjpHZXRVbmlmb3JtQmxv
Y2tJbmRleChwcm9ncmFtLCB1bmlmb3JtQmxvY2tOYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCkBA
IC0xOTczLDcgKzIzMDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sCiBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9i
amVjdCBwcm9ncmFtLCBHQ0dMdWludCB1bmlmb3JtQmxvY2tJbmRleCkKIHsKICAgICBBU1NFUlQo
cHJvZ3JhbSk7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgR0xpbnQgbWF4TGVu
Z3RoID0gMDsKICAgICBnbDo6R2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X0JMT0NLX01BWF9OQU1FX0xFTkdUSCwgJm1heExlbmd0aCk7CiAgICAgaWYgKG1heExlbmd0aCA8
PSAwKSB7CkBAIC0xOTkxLDcgKzIzMjAsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoUGxhdGZvcm1HTE9iamVjdCBwcm9ncgogdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybUJsb2NrQmluZGluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHQ0dMdWludCB1bmlm
b3JtQmxvY2tCaW5kaW5nKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybUJsb2NrQmluZGluZyhwcm9ncmFtLCB1bmlmb3JtQmxvY2tJ
bmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CiB9CiAKQEAgLTE5OTksNyArMjMzMCw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1CbG9ja0JpbmRpbmcoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCBHQ0dMCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdM
dWludCBuYW1lID0gMDsKICAgICBnbDo6R2VuUXVlcmllcygxLCAmbmFtZSk7CiAgICAgcmV0dXJu
IG5hbWU7CkBAIC0yMDA3LDE5ICsyMzQwLDI1IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmNyZWF0ZVF1ZXJ5KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmVnaW5RdWVyeShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgcXVlcnkp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJlZ2luUXVlcnkodGFyZ2V0LCBxdWVy
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmVuZFF1ZXJ5KEdDR0xlbnVt
IHRhcmdldCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RW5kUXVlcnkodGFyZ2V0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UXVlcnlPYmplY3R1aXYo
R0NHTHVpbnQgaWQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMdWludCogcGFyYW1zKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpHZXRRdWVyeU9iamVjdHVpdihpZCwgcG5hbWUsIHBhcmFt
cyk7CiB9CiAKQEAgLTIwMjcsNyArMjM2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFF1ZXJ5T2JqZWN0dWl2KEdDR0x1aW50IGlkLCBHQ0dMZW51bSBwbmFtZSwgR0NHCiAK
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBuYW1lID0g
MDsKICAgICBnbDo6R2VuVHJhbnNmb3JtRmVlZGJhY2tzKDEsICZuYW1lKTsKICAgICByZXR1cm4g
bmFtZTsKQEAgLTIwMzUsNDkgKzIzNzYsNjQgQEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhQbGF0Zm9ybUdMT2JqZWN0
IHRyYW5zZm9ybUZlZWRiYWNrKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEZWxl
dGVUcmFuc2Zvcm1GZWVkYmFja3MoMSwgJnRyYW5zZm9ybUZlZWRiYWNrKTsKIH0KIAogR0NHTGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzVHJhbnNmb3JtRmVlZGJhY2soUGxhdGZv
cm1HTE9iamVjdCB0cmFuc2Zvcm1GZWVkYmFjaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFM
U0U7CisKICAgICByZXR1cm4gZ2w6OklzVHJhbnNmb3JtRmVlZGJhY2sodHJhbnNmb3JtRmVlZGJh
Y2spOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpiaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRyYW5zZm9ybUZlZWRiYWNr
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpCaW5kVHJhbnNmb3JtRmVlZGJhY2so
dGFyZ2V0LCB0cmFuc2Zvcm1GZWVkYmFjayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmJlZ2luVHJhbnNmb3JtRmVlZGJhY2soR0NHTGVudW0gcHJpbWl0aXZlTW9kZSkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6QmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhwcmlt
aXRpdmVNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZW5kVHJhbnNm
b3JtRmVlZGJhY2soKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpFbmRUcmFuc2Zv
cm1GZWVkYmFjaygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHZhcnlpbmdzLCBHQ0dMZW51bSBidWZmZXJNb2RlKQogeworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFZlY3RvcjxDU3RyaW5n
PiBjb252ZXJ0ZWRWYXJ5aW5ncyA9IHZhcnlpbmdzLm1hcChbXShjb25zdCBTdHJpbmcmIHZhcnlp
bmcpIHsKICAgICAgICAgcmV0dXJuIHZhcnlpbmcudXRmOCgpOwogICAgIH0pOwogICAgIFZlY3Rv
cjxjb25zdCBjaGFyKj4gcG9pbnRlcnNUb1ZhcnlpbmdzID0gY29udmVydGVkVmFyeWluZ3MubWFw
KFtdKGNvbnN0IENTdHJpbmcmIHZhcnlpbmcpIHsKICAgICAgICAgcmV0dXJuIHZhcnlpbmcuZGF0
YSgpOwogICAgIH0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgZ2w6OlRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgcG9pbnRlcnNUb1ZhcnlpbmdzLnNpemUoKSwg
cG9pbnRlcnNUb1ZhcnlpbmdzLmRhdGEoKSwgYnVmZmVyTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhQbGF0Zm9ybUdM
T2JqZWN0IHByb2dyYW0sIEdDR0x1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIEdDR0xzaXplaSBidWZTaXplID0gMDsKICAgICBnbDo6R2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpUUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RILCAmYnVmU2l6ZSk7CiAgICAgaWYgKCFidWZTaXplKQpA
QCAtMjA5Nyw3ICsyNDUzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3IKIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZlckJhc2UoR0NHTGVudW0gdGFyZ2V0LCBHQ0dM
dWludCBpbmRleCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgZ2w6OkJpbmRCdWZmZXJCYXNlKHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CiB9CiAK
QEAgLTIxMzEsMzIgKzI0ODksNDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0
QnVmZmVyU3ViRGF0YShHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnRwdHIgc3JjQnkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKEdDR0xpbnQgc3JjWDAsIEdD
R0xpbnQgc3JjWTAsIEdDR0xpbnQgc3JjWDEsIEdDR0xpbnQgc3JjWTEsIEdDR0xpbnQgZHN0WDAs
IEdDR0xpbnQgZHN0WTAsIEdDR0xpbnQgZHN0WDEsIEdDR0xpbnQgZHN0WTEsIEdDR0xiaXRmaWVs
ZCBtYXNrLCBHQ0dMZW51bSBmaWx0ZXIpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3Jj
WTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRl
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmZyYW1lYnVmZmVyVGV4dHVy
ZUxheWVyKEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgUGxhdGZvcm1HTE9i
amVjdCB0ZXh0dXJlLCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IGxheWVyKQogeworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpGcmFtZWJ1
ZmZlclRleHR1cmVMYXllcih0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXll
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmludmFsaWRhdGVGcmFtZWJ1
ZmZlcihHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0NH
TGVudW0qIGF0dGFjaG1lbnRzKQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpJbnZhbGlkYXRlRnJhbWVidWZmZXIodGFyZ2V0LCBu
dW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjppbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMc2l6
ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDR0xlbnVtKiBhdHRhY2htZW50cywgR0NHTGludCB4
LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkKIHsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6SW52
YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRz
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZEJ1ZmZlcihHQ0dMZW51bSBzcmMpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlJlYWRCdWZmZXIoc3JjKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB6b2Zmc2V0LCBHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBH
Q0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gYXR0cnMg
PSBjb250ZXh0QXR0cmlidXRlcygpOwogICAgIEdDR0xlbnVtIGZyYW1lYnVmZmVyVGFyZ2V0ID0g
bV9pc0ZvcldlYkdMMiA/IEdyYXBoaWNzQ29udGV4dEdMOjpSRUFEX0ZSQU1FQlVGRkVSIDogR3Jh
cGhpY3NDb250ZXh0R0w6OkZSQU1FQlVGRkVSOwogCkBAIC0yMTcxLDE2MyArMjU0NiwyMjUgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlM0QoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLAogCiBHQ0dMaW50IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpnZXRGcmFnRGF0YUxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIHJldHVybiBnbDo6R2V0
RnJhZ0RhdGFMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMXVpKEdDR0xpbnQgbG9jYXRpb24sIEdD
R0x1aW50IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMXVpKGxv
Y2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0y
dWkoR0NHTGludCBsb2NhdGlvbiwgR0NHTHVpbnQgdjAsIEdDR0x1aW50IHYxKQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMnVpKGxvY2F0aW9uLCB2MCwgdjEpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM3VpKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0zdWkobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNHVpKEdDR0xpbnQgbG9jYXRp
b24sIEdDR0x1aW50IHYwLCBHQ0dMdWludCB2MSwgR0NHTHVpbnQgdjIsIEdDR0x1aW50IHYzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNHVpKGxvY2F0aW9uLCB2MCwg
djEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0x
dWl2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0x1aW50KiBkYXRhLCBHQ0dMdWludCBzcmNP
ZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTF1aXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0ydWl2KEdDR0xpbnQgbG9j
YXRpb24sIGNvbnN0IEdDR0x1aW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTJ1aXYo
bG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zdWl2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdD
R0x1aW50KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybTN1aXYobG9jYXRpb24sIHNyY0xl
bmd0aCwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm00dWl2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0x1aW50KiBkYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybTR1aXYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSArIHNy
Y09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRy
aXgyeDNmdihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdD
R0xmbG9hdCogZGF0YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXgyeDNmdihsb2NhdGlv
biwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3gyZnYoR0NHTGludCBsb2NhdGlv
biwgR0NHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtTWF0cml4M3gyZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3Nl
LCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6
dW5pZm9ybU1hdHJpeDJ4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNy
Y0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJ4
NGZ2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXg0eDJmdihHQ0dM
aW50IGxvY2F0aW9uLCBHQ0dMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdDR0xmbG9hdCogZGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgc3JjTGVuZ3Ro
LCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M3g0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwg
R0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlm
b3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgdHJhbnNwb3NlLCBkYXRhICsgc3Jj
T2Zmc2V0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybU1hdHJp
eDR4M2Z2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NH
TGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsK
LSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDR4M2Z2KGxvY2F0aW9u
LCBzcmNMZW5ndGgsIHRyYW5zcG9zZSwgZGF0YSArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0aShHQ0dMdWludCBpbmRleCwgR0NH
TGludCB4LCBHQ0dMaW50IHksIEdDR0xpbnQgeiwgR0NHTGludCB3KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGdsOjpWZXJ0ZXhBdHRyaWJJNGkoaW5kZXgsIHgsIHksIHosIHcpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNGl2KEdDR0x1aW50
IGluZGV4LCBjb25zdCBHQ0dMaW50KiB2YWx1ZXMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OlZlcnRleEF0dHJpYkk0aXYoaW5kZXgsIHZhbHVlcyk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYkk0dWkoR0NHTHVpbnQgaW5kZXgsIEdDR0x1
aW50IHgsIEdDR0x1aW50IHksIEdDR0x1aW50IHosIEdDR0x1aW50IHcpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlZlcnRleEF0dHJpYkk0dWkoaW5kZXgsIHgsIHksIHosIHcpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2ZXJ0ZXhBdHRyaWJJNHVpdihHQ0dM
dWludCBpbmRleCwgY29uc3QgR0NHTHVpbnQqIHZhbHVlcykKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICBnbDo6VmVydGV4QXR0cmliSTR1aXYoaW5kZXgsIHZhbHVlcyk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdSYW5nZUVsZW1lbnRzKEdDR0xlbnVtIG1vZGUs
IEdDR0x1aW50IHN0YXJ0LCBHQ0dMdWludCBlbmQsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0g
dHlwZSwgR0NHTGludHB0ciBvZmZzZXQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRyYXdSYW5nZUVsZW1lbnRzKG1vZGUsIHN0
YXJ0LCBlbmQsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvZmZzZXQpKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZHJhd0J1ZmZlcnMoR0NHTHNpemVp
IG4sIGNvbnN0IEdDR0xlbnVtKiBidWZzKQogeworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpEcmF3QnVmZmVycyhuLCBidWZzKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJCdWZmZXJpdihHQ0dMZW51bSBi
dWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0NHTGludCogdmFsdWVzLCBHQ0dMdWlu
dCBzcmNPZmZzZXQpCiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OkNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1
ZXMgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVh
ckJ1ZmZlcnVpdihHQ0dMZW51bSBidWZmZXIsIEdDR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0NH
THVpbnQqIHZhbHVlcywgR0NHTHVpbnQgc3JjT2Zmc2V0KQogeworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpDbGVhckJ1ZmZlcnVpdihi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlcyArIHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQnVmZmVyZnYoR0NHTGVudW0gYnVmZmVyLCBHQ0dMaW50
IGRyYXdidWZmZXIsIGNvbnN0IEdDR0xmbG9hdCogdmFsdWVzLCBHQ0dMdWludCBzcmNPZmZzZXQp
CiB7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgZ2w6OkNsZWFyQnVmZmVyZnYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZXMgKyBzcmNPZmZz
ZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGVhckJ1ZmZlcmZpKEdD
R0xlbnVtIGJ1ZmZlciwgR0NHTGludCBkcmF3YnVmZmVyLCBHQ0dMZmxvYXQgZGVwdGgsIEdDR0xp
bnQgc3RlbmNpbCkKIHsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBnbDo6Q2xlYXJCdWZmZXJmaShidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRo
LCBzdGVuY2lsKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlUXVl
cnkoUGxhdGZvcm1HTE9iamVjdCBxdWVyeSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6RGVsZXRlUXVlcmllcygxLCAmcXVlcnkpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6aXNRdWVyeShQbGF0Zm9ybUdMT2JqZWN0IHF1ZXJ5KQogewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNRdWVyeShxdWVyeSk7CiB9
CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFF1ZXJ5KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
ICAgICBHTGludCB2YWx1ZTsKICAgICBnbDo6R2V0UXVlcnlpdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQbGF0Zm9ybUdMT2JqZWN0Pih2YWx1ZSk7CkBA
IC0yMzM1LDcgKzI3NzIsOSBAQCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRRdWVyeShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYQogCiBQbGF0Zm9ybUdM
T2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVTYW1wbGVyKCkKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm4gMDsKKwogICAgIEdMdWludCBuYW1lID0gMDsKICAgICBnbDo6R2VuU2FtcGxl
cnMoMSwgJm5hbWUpOwogICAgIHJldHVybiBuYW1lOwpAQCAtMjM0MywxMDQgKzI3ODIsMTM4IEBA
IFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVNhbXBsZXIo
KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTYW1wbGVyKFBsYXRmb3Jt
R0xPYmplY3Qgc2FtcGxlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
IW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6RGVsZXRl
U2FtcGxlcnMoMSwgJnNhbXBsZXIpOwogfQogCiBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6aXNTYW1wbGVyKFBsYXRmb3JtR0xPYmplY3Qgc2FtcGxlcikKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisKICAgICByZXR1cm4gZ2w6OklzU2FtcGxlcihzYW1wbGVyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFNhbXBsZXIoR0NHTHVpbnQg
dW5pdCwgUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpCaW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmkoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVy
LCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCBwYXJhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBnbDo6U2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c2FtcGxlclBhcmFtZXRlcmYoUGxhdGZvcm1H
TE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0IHBhcmFtKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFt
ZSwgcGFyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRTYW1wbGVy
UGFyYW1ldGVyZnYoUGxhdGZvcm1HTE9iamVjdCBzYW1wbGVyLCBHQ0dMZW51bSBwbmFtZSwgR0NH
TGZsb2F0KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6R2V0U2FtcGxl
clBhcmFtZXRlcmZ2KHNhbXBsZXIsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0w6OmdldFNhbXBsZXJQYXJhbWV0ZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNh
bXBsZXIsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6R2V0U2FtcGxlclBhcmFtZXRlcml2KHNhbXBsZXIsIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKIEdDR0xzeW5jIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpmZW5jZVN5bmMoR0NH
TGVudW0gY29uZGl0aW9uLCBHQ0dMYml0ZmllbGQgZmxhZ3MpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKICAgICByZXR1cm4gZ2w6OkZlbmNlU3luYyhjb25kaXRpb24sIGZsYWdzKTsKIH0KIAog
R0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzU3luYyhHQ0dMc3luYyBzeW5j
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiBnbDo6SXNTeW5j
KHN5bmMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVTeW5jKEdD
R0xzeW5jIHN5bmMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZ2w6OkRlbGV0ZVN5bmMo
c3luYyk7CiB9CiAKIEdDR0xlbnVtIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjbGllbnRXYWl0
U3luYyhHQ0dMc3luYyBzeW5jLCBHQ0dMYml0ZmllbGQgZmxhZ3MsIEdDR0x1aW50NjQgdGltZW91
dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7CisKICAgICByZXR1cm4gZ2w6
OkNsaWVudFdhaXRTeW5jKHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6d2FpdFN5bmMoR0NHTHN5bmMgc3luYywgR0NHTGJpdGZpZWxkIGZs
YWdzLCBHQ0dMaW50NjQgdGltZW91dCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6
V2FpdFN5bmMoc3luYywgZmxhZ3MsIHRpbWVvdXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRTeW5jaXYoR0NHTHN5bmMgc3luYywgR0NHTGVudW0gcG5hbWUsIEdDR0xz
aXplaSBidWZTaXplLCBHQ0dMaW50ICp2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICBnbDo6R2V0U3luY2l2KHN5bmMsIHBuYW1lLCBidWZTaXplLCBudWxscHRyLCB2YWx1ZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhdXNlVHJhbnNmb3JtRmVlZGJhY2so
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpQYXVzZVRyYW5zZm9ybUZlZWRiYWNr
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc3VtZVRyYW5zZm9ybUZl
ZWRiYWNrKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6UmVzdW1lVHJhbnNmb3Jt
RmVlZGJhY2soKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZEJ1ZmZl
clJhbmdlKEdDR0xlbnVtIHRhcmdldCwgR0NHTHVpbnQgaW5kZXgsIFBsYXRmb3JtR0xPYmplY3Qg
YnVmZmVyLCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRyIHNpemUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgZ2w6OkJpbmRCdWZmZXJSYW5nZSh0YXJnZXQsIGluZGV4LCBidWZm
ZXIsIG9mZnNldCwgc2l6ZSk7CiB9CiAKIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldFVuaWZvcm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHVuaWZvcm1OYW1lcykKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwogICAgIFZlY3RvcjxDU3RyaW5nPiB1dGY4ID0gdW5p
Zm9ybU5hbWVzLm1hcChbXShhdXRvJiB4KSB7IHJldHVybiB4LnV0ZjgoKTsgfSk7CiAgICAgVmVj
dG9yPGNvbnN0IGNoYXIqPiBjc3RyID0gdXRmOC5tYXAoW10oYXV0byYgeCkgeyByZXR1cm4geC5k
YXRhKCk7IH0pOwogICAgIFZlY3RvcjxHQ0dMdWludD4gcmVzdWx0KGNzdHIuc2l6ZSgpLCAwKTsK
QEAgLTI1MDIsNjcgKzI5NzUsODkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGwKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFmdihHQ0dMaW50IGxvY2F0aW9uLCBjb25z
dCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3Ro
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWZ2KGxvY2F0aW9uLCBz
cmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjp1bmlmb3JtMmZ2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xmbG9hdCogZGF0
YSwgR0NHTHVpbnQgc3JjT2Zmc2V0LCBHQ0dMdWludCBzcmNMZW5ndGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZ2w6OlVuaWZvcm0yZnYobG9jYXRpb24sIHNyY0xlbmd0aCwgZGF0YSAr
IHNyY09mZnNldCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0z
ZnYoR0NHTGludCBsb2NhdGlvbiwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNP
ZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBn
bDo6VW5pZm9ybTNmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCBkYXRhICsgc3JjT2Zmc2V0KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihHQ0dMaW50IGxvY2F0
aW9uLCBjb25zdCBHQ0dMZmxvYXQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQg
c3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGZ2KGxv
Y2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWl2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xp
bnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtMWl2KGxvY2F0aW9uLCBzcmNMZW5ndGgs
IGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1
bmlmb3JtMml2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdDR0xpbnQqIGRhdGEsIEdDR0x1aW50
IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGdsOjpVbmlmb3JtMml2KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQg
bG9jYXRpb24sIGNvbnN0IEdDR0xpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVp
bnQgc3JjTGVuZ3RoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtM2l2
KGxvY2F0aW9uLCBzcmNMZW5ndGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGl2KEdDR0xpbnQgbG9jYXRpb24sIGNvbnN0IEdD
R0xpbnQqIGRhdGEsIEdDR0x1aW50IHNyY09mZnNldCwgR0NHTHVpbnQgc3JjTGVuZ3RoKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIGdsOjpVbmlmb3JtNGl2KGxvY2F0aW9uLCBzcmNMZW5n
dGgsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojp1bmlmb3JtTWF0cml4MmZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNy
Y0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDJm
dihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtTWF0cml4M2Z2KEdDR0xpbnQg
bG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBH
Q0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFu
c3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjp1bmlmb3JtTWF0cml4NGZ2KEdDR0xpbnQgbG9jYXRpb24sIEdDR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0NHTGZsb2F0KiBkYXRhLCBHQ0dMdWludCBzcmNPZmZzZXQsIEdDR0x1aW50
IHNyY0xlbmd0aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbDo6VW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgc3JjTGVuZ3RoLCB0cmFuc3Bvc2UsIGRhdGEgKyBzcmNPZmZzZXQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb2NvYS5tbQppbmRleCBiZDBm
OTNlMjA0YmRkOGQ5MmE0MmFkZDg5OTZkZDRmYmVmOWFkNWViLi4yZTFjNzk5ZTgyODUzYjMyMGI4
Y2VkZGQ0YTZmZTVlNTA0YTlkODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMQ29jb2EubW0KQEAgLTM4NywxMCArMzg3LDggQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQK
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woKQogewog
ICAgIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLnJlbW92
ZUNvbnRleHQodGhpcyk7Ci0KLSAgICBpZiAobV9jb250ZXh0T2JqKSB7CisgICAgaWYgKG1ha2VD
b250ZXh0Q3VycmVudCgpKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBh
dHRycyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OyAvLyBUT0RPOiBjaGVjayByZXN1bHQuCiAgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKIAogICAgICAgICBpZiAoYXR0cnMuYW50aWFsaWFzKSB7CkBAIC00MDcsMTgg
KzQwNSwxOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMKCkKICAgICAgICAgICAgIGdsOjpEZWxldGVUZXh0dXJlcygxLCAmbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgaWYgKG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyRkJP
KQogICAgICAgICAgICAgZ2w6OkRlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9wcmVzZXJ2ZURyYXdp
bmdCdWZmZXJGQk8pOwotCi0gICAgICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKSB7Ci0g
ICAgICAgICAgICBFR0xfUmVsZWFzZVRleEltYWdlKG1fZGlzcGxheU9iaiwgbV9kaXNwbGF5QnVm
ZmVyUGJ1ZmZlciwgRUdMX0JBQ0tfQlVGRkVSKTsKLSAgICAgICAgICAgIEVHTF9EZXN0cm95U3Vy
ZmFjZShtX2Rpc3BsYXlPYmosIG1fZGlzcGxheUJ1ZmZlclBidWZmZXIpOwotICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKQorICAgICAgICBFR0xfRGVzdHJv
eVN1cmZhY2UobV9kaXNwbGF5T2JqLCBtX2Rpc3BsYXlCdWZmZXJQYnVmZmVyKTsKKyAgICBpZiAo
bV93ZWJHTExheWVyKSB7CiAgICAgICAgIGF1dG8gcmVjeWNsZWRCdWZmZXIgPSBbbV93ZWJHTExh
eWVyIHJlY3ljbGVCdWZmZXJdOwogICAgICAgICBpZiAocmVjeWNsZWRCdWZmZXIuaGFuZGxlKQog
ICAgICAgICAgICAgRUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgcmVjeWNsZWRCdWZm
ZXIuaGFuZGxlKTsKICAgICAgICAgYXV0byBjb250ZW50c0hhbmRsZSA9IFttX3dlYkdMTGF5ZXIg
ZGV0YWNoQ2xpZW50XTsKICAgICAgICAgaWYgKGNvbnRlbnRzSGFuZGxlKQogICAgICAgICAgICAg
RUdMX0Rlc3Ryb3lTdXJmYWNlKG1fZGlzcGxheU9iaiwgY29udGVudHNIYW5kbGUpOwotCisgICAg
fQorICAgIGlmIChtX2NvbnRleHRPYmopIHsKICAgICAgICAgRUdMX01ha2VDdXJyZW50KG1fZGlz
cGxheU9iaiwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7
CiAgICAgICAgIEVHTF9EZXN0cm95Q29udGV4dChtX2Rpc3BsYXlPYmosIG1fY29udGV4dE9iaik7
CiAgICAgfQpAQCAtNTUyLDEyICs1NTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6c2V0Q29udGV4dFZpc2liaWxpdHkoYm9vbCBpc1Zpc2libGUpCiAjaWYgUExBVEZPUk0oTUFD
KQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dXBkYXRlQ0dMQ29udGV4dCgpCiB7Ci0g
ICAgaWYgKCFtX2NvbnRleHRPYmopCisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKICAg
ICAgICAgcmV0dXJuOwotCiAgICAgTE9HKFdlYkdMLCAiRGV0ZWN0ZWQgYSBtdXggc3dpdGNoIG9y
IGRpc3BsYXkgcmVjb25maWd1cmF0aW9uLiBDYWxsIENHTFVwZGF0ZUNvbnRleHQuICglcCkiLCB0
aGlzKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEVHTERldmljZUVYVCBkZXZp
Y2UgPSBudWxscHRyOwogICAgIEVHTF9RdWVyeURpc3BsYXlBdHRyaWJFWFQobV9kaXNwbGF5T2Jq
LCBFR0xfREVWSUNFX0VYVCwgcmVpbnRlcnByZXRfY2FzdDxFR0xBdHRyaWIqPigmZGV2aWNlKSk7
CiAgICAgQ0dMQ29udGV4dE9iaiBjZ2xDb250ZXh0ID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNH
TE9wZW5HTC5jcHAKaW5kZXggYmJkOWQ0NDZmOTFlZDVlMWJiYmE0ZDM3MDJkNDMyZjcxZWZmYTRl
MC4uMTc3ODZhNjRiYTRlMWRhMDA5NjRlYWU5OTdkMjkyNzY0ZGFkMTg5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5H
TC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnNHTE9wZW5HTC5jcHAKQEAgLTUwLDE3ICs1MCwyNSBAQCBFeHRlbnNpb25zR0xPcGVuR0w6
On5FeHRlbnNpb25zR0xPcGVuR0woKSA9IGRlZmF1bHQ7CiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwg
bG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZ
MSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKIHsKKyAgICBpZiAo
IW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgw
LCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lkIEV4dGVuc2lv
bnNHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlm
ICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCh0YXJnZXQsIHNhbXBsZXMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZvcm1HTE9iamVjdCBF
eHRlbnNpb25zR0xPcGVuR0w6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKIHsKLSAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgYXJyYXkgPSAwOwog
I2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQogICAgIGlmIChpc1ZlcnRleEFycmF5
T2JqZWN0U3VwcG9ydGVkKCkpCkBAIC03Niw3ICs4NCw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3Bl
bkdMOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlm
ICghYXJyYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKICAgICBp
ZiAoaXNWZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCgpKQogICAgICAgICBnbERlbGV0ZVZlcnRl
eEFycmF5cygxLCAmYXJyYXkpOwpAQCAtOTAsNyArMTAwLDkgQEAgR0NHTGJvb2xlYW4gRXh0ZW5z
aW9uc0dMT3BlbkdMOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAg
ICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogI2lmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oV0lOKQogICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkp
CiAgICAgICAgIHJldHVybiBnbElzVmVydGV4QXJyYXkoYXJyYXkpOwpAQCAtMTAyLDcgKzExNCw5
IEBAIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTDo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybUdMT2JqZWN0IGFycmF5KQogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6YmluZFZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7Ci0gICAgbV9jb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lO
KQogICAgIGlmIChpc1ZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKCkpCiAgICAgICAgIGdsQmlu
ZFZlcnRleEFycmF5KGFycmF5KTsKQEAgLTE5Niw2ICsyMTAsOSBAQCBib29sIEV4dGVuc2lvbnNH
TE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogCiB2b2lkIEV4
dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0J1ZmZlcnNFWFQoR0NHTHNpemVpIG4sIGNvbnN0IEdDR0xl
bnVtKiBidWZzKQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gIEZJWE1FOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3Ig
b3RoZXIgcGxhdGZvcm1zLgogI2lmIFBMQVRGT1JNKEdUSykKICAgICA6OmdsRHJhd0J1ZmZlcnMo
biwgYnVmcyk7CkBAIC0yMDcsNyArMjI0LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0w6OmRy
YXdCdWZmZXJzRVhUKEdDR0xzaXplaSBuLCBjb25zdCBHQ0dMZW51bSogYnVmcykKIAogdm9pZCBF
eHRlbnNpb25zR0xPcGVuR0w6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NH
TGludCBmaXJzdCwgR0NHTHNpemVpIGNvdW50LCBHQ0dMc2l6ZWkgcHJpbWNvdW50KQogewotICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiBQTEFURk9STShHVEsp
CiAgICAgOjpnbERyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291
bnQpOwogI2Vsc2UKQEAgLTIyMCw3ICsyMzksOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6
ZHJhd0FycmF5c0luc3RhbmNlZChHQ0dMZW51bSBtb2RlLCBHQ0dMaW50IGZpcnN0LCBHQ0dMcwog
CiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xlbnVt
IG1vZGUsIEdDR0xzaXplaSBjb3VudCwgR0NHTGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0NHTHNpemVpIHByaW1jb3VudCkKIHsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIDo6Z2xEcmF3RWxlbWVudHNJbnN0YW5j
ZWQobW9kZSwgY291bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG9mZnNldCkpLCBwcmltY291bnQpOwogI2Vsc2UKQEAgLTIzNCw3ICsyNTUs
OSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDR0xl
bnVtIG1vZGUsIEdDR0xzaXplaSBjb3VudCwgRwogCiB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTDo6
dmVydGV4QXR0cmliRGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXNvcikKIHsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgUExBVEZPUk0o
R1RLKQogICAgIDo6Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICNlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uc0dMT3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnNHTE9wZW5HTEVTLmNwcAppbmRleCBmNjRiZGVlMzEyOTMzYmYzZWRk
NWZiZGY1MzE5MmRiNDU0YTdlZGM2Li5hYjhjYjU0ZjVlODc5ZWY0YjhhOTBkMTlhN2VjOTJjODlj
ZTIwNTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uc0dMT3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zR0xPcGVuR0xFUy5jcHAKQEAgLTg1LDYgKzg1LDgg
QEAgYm9vbCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgdGV4dHVyZSwgaW50IGxldmVsLCB1
bnNpZ25lZCBsb25nIHNhbXBsZXMpCiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRE11bHRpc2FtcGxlSU1HKQogICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IHNhbXBsZXMpOwogICAgIGVsc2UKQEAgLTkzLDYgKzk1LDggQEAgdm9pZCBFeHRlbnNpb25zR0xP
cGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25n
IHRhcmcKIAogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMs
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKQogICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAg
IGVsc2UKQEAgLTEwNiw2ICsxMTAsOCBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpibGl0
RnJhbWVidWZmZXIobG9uZyAvKiBzcmNYMCAqLywgbG9uZyAvKiBzcmNZMCAqLywgbAogCiB2b2lk
IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBp
bnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
CiB7CisgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CiAgICAgaWYgKG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCiAg
ICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNhbXBsZXMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBlbHNlCkBAIC0xMjksOCArMTM1
LDkgQEAgdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6cG9wR3JvdXBNYXJrZXJFWFQodm9pZCkK
IAogUGxhdGZvcm1HTE9iamVjdCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJy
YXlPRVMoKQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYg
KG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIEdMdWludCBh
cnJheSA9IDA7CiAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKICAg
ICAgICAgcmV0dXJuIGFycmF5OwpAQCAtMTQ0LDMzICsxNTEsMzUgQEAgdm9pZCBFeHRlbnNpb25z
R0xPcGVuR0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm1HTE9iamVjdCBhcnJheSkK
IHsKICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKQor
ICAgIGlmIChtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOwotICAgIGVsc2UKLSAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiB9CiAKIEdDR0xib29sZWFuIEV4dGVuc2lvbnNHTE9wZW5HTEVT
Ojppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiB7CiAgICAgaWYgKCFh
cnJheSkKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotCi0gICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpCisgICAgaWYgKG1f
Z2xJc1ZlcnRleEFycmF5T0VTKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKICAgICAgICAgcmV0dXJu
IG1fZ2xJc1ZlcnRleEFycmF5T0VTKGFycmF5KTsKLQorICAgIH0KICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybUdMT2JqZWN0IGFycmF5KQogewotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgaWYgKG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgaWYgKG1fZ2xCaW5kVmVy
dGV4QXJyYXlPRVMpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VT
KGFycmF5KTsKLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogfQogCkBAIC0xODgsOCArMTk3LDkg
QEAgaW50IEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkK
ICAgICBpZiAobV9jb250ZXh0UmVzZXRTdGF0dXMgIT0gR0xfTk9fRVJST1IpCiAgICAgICAgIHJl
dHVybiBtX2NvbnRleHRSZXNldFN0YXR1czsKICAgICBpZiAobV9nbEdldEdyYXBoaWNzUmVzZXRT
dGF0dXNFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0gbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQo
KTsKKyAgICAgICAgaW50IHJlYXNvbkZvclJlc2V0ID0gVU5LTk9XTl9DT05URVhUX1JFU0VUX0FS
QjsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
ICAgICByZWFzb25Gb3JSZXNldCA9IG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUKCk7CiAg
ICAgICAgIGlmIChyZWFzb25Gb3JSZXNldCAhPSBHTF9OT19FUlJPUikKICAgICAgICAgICAgIG1f
Y29udGV4dFJlc2V0U3RhdHVzID0gcmVhc29uRm9yUmVzZXQ7CiAgICAgICAgIHJldHVybiByZWFz
b25Gb3JSZXNldDsKQEAgLTIwMiw3ICsyMTIsOSBAQCBpbnQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6
OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogdm9pZCBFeHRlbnNpb25zR0xPcGVuR0xFUzo6
cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQsIEdDR0xlbnVtIGZvcm1hdCwgR0NHTGVudW0gdHlwZSwgR0NHTHNpemVpIGJ1ZlNpemUs
IHZvaWQgKmRhdGEpCiB7CiAgICAgaWYgKG1fZ2xSZWFkblBpeGVsc0VYVCkgewotICAgICAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBpZiAoIW1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBp
cyBmaXhlZCwgaS5lLiwKICAgICAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBz
aG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCiAgICAgICAgIDo6Z2xGbHVzaCgp
OwpAQCAtMjE5LDcgKzIzMSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OnJlYWRuUGl4
ZWxzRVhUKGludCB4LCBpbnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6CiB2b2lkIEV4dGVu
c2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBs
b2NhdGlvbiwgR0NHTHNpemVpIGJ1ZlNpemUsIGZsb2F0ICpwYXJhbXMpCiB7CiAgICAgaWYgKG1f
Z2xHZXRuVW5pZm9ybWZ2RVhUKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBtX2dsR2V0blVuaWZvcm1mdkVYVChwcm9ncmFt
LCBsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMCw3ICsyNDQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpnZXRuVW5pZm9ybWZ2
RVhUKEdDR0x1aW50IHByb2dyYW0sIGludCBsb2NhdGlvbiwgR0NHTAogdm9pZCBFeHRlbnNpb25z
R0xPcGVuR0xFUzo6Z2V0blVuaWZvcm1pdkVYVChHQ0dMdWludCBwcm9ncmFtLCBpbnQgbG9jYXRp
b24sIEdDR0xzaXplaSBidWZTaXplLCBpbnQgKnBhcmFtcykKIHsKICAgICBpZiAobV9nbEdldG5V
bmlmb3JtaXZFWFQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCiAgICAgICAgIG1fZ2xHZXRuVW5pZm9ybWl2RVhUKHByb2dyYW0sIGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ1LDcg
KzI2MSw5IEBAIHZvaWQgRXh0ZW5zaW9uc0dMT3BlbkdMRVM6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0NHTGVudW0gbW9kZSwgR0NHTGludCBmaXJzdCwgR0NHCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9nbERy
YXdBcnJheXNJbnN0YW5jZWRBTkdMRShtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiB9
CiAKQEAgLTI1Niw3ICsyNzQsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9wZW5HTEVTOjpkcmF3RWxl
bWVudHNJbnN0YW5jZWQoR0NHTGVudW0gbW9kZSwgR0NHTHNpemVpIGNvdW50LAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIG1fZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBjb3VudCwgdHlwZSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSks
IHByaW1jb3VudCk7CiB9CiAKQEAgLTI2Nyw3ICsyODcsOSBAQCB2b2lkIEV4dGVuc2lvbnNHTE9w
ZW5HTEVTOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDR0x1aW50IGluZGV4LCBHQ0dMdWludCBkaXZp
c29yKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIG1fZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaW5kZXgs
IGRpdmlzb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCmluZGV4IGQx
ZWY2MzQ4MWU3ZDU1MDZmODRiZjJhNzM5ZTE5Nzg4NmU2MjJmNDYuLjI0NDI4OWQ1YmVkMjBiOTBj
MGU2NmMzYzM3NTQzNTEyZjI0OTA5YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TC5oCkBAIC0xMDgsNyArMTA4LDYgQEAgcHVibGljOgogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCi0gICAgYm9vbCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVudW0gY2xhc3MgUmVsZWFz
ZUJlaGF2aW9yIHsKICAgICAgICAgUHJlc2VydmVUaHJlYWRSZXNvdXJjZXMsCkBAIC01MTcsNiAr
NTE2LDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHRHTE9wZW5HTChH
cmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBEZXN0aW5hdGlvbiA9IERl
c3RpbmF0aW9uOjpPZmZzY3JlZW4sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKiBzaGFyZWRDb250
ZXh0ID0gbnVsbHB0cik7CiAKKyAgICAvLyBDYWxsZWQgb25jZSBieSBhbGwgdGhlIHB1YmxpYyBl
bnRyeSBwb2ludHMgdGhhdCBldmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIC8vIENhbGxlZCBv
bmNlIGJ5IGFsbCB0aGUgcHVibGljIGVudHJ5IHBvaW50cyBvZiBFeHRlbnNpb25zR0wgdGhhdCBl
dmVudHVhbGx5IGNhbGwgT3BlbkdMLgorICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkgV0FS
Tl9VTlVTRURfUkVUVVJOOwogCiAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVzZXIncyBy
ZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLAogICAgIC8vIGluIHBhcnRpY3Vs
YXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCmluZGV4IDIwYmYyZjRm
OTg0Y2M3ZjJiYjczYzZkYTU1OWYwODAwYTMzYTE0OWMuLjc1MGVkMzI2ZWNlNjVlODhmNmI0MTM2
MDE1YzRmOTMzNzQ0ODljYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5H
TEJhc2UuY3BwCkBAIC0yMzcsNyArMjM3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWMKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQ0dMZW51
bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xz
aXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAjaWYgVVNFKE9QRU5HTCkKICAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgpAQCAt
MjY0LDcgKzI2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVnZXJ2
KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKICAgICAvLyBiZWNhdXNlIGRlc2t0b3Ag
R0wncyBjb3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50
cwogICAgIC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFj
aCB2ZWN0b3IgaGFzIDQgY29tcG9uZW50cykuCiAgICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUg
cmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgc3dpdGNoIChwbmFtZSkgewogI2lmIFVTRShPUEVOR0wpCiAgICAg
Y2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgpAQCAtMzEwLDcgKzMxNCw5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQ0dM
ZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBBU1NFUlQocHJl
Y2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgc3dpdGNoIChwcmVjaXNpb25U
eXBlKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHRHTDo6TE9XX0lOVDoKQEAgLTQwMywxMyAr
NDA5LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJEZXB0aChHQ0dMY2xhbXBm
IGRlcHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRo
KTsKIH0KIApAQCAtNDI4LDcgKzQzOCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwKIAogICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBi
dWcgaXMgZml4ZWQsIGkuZS4sCiAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBz
aG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbEZsdXNoKCk7CiAgICAgQVNTRVJUKG1fc3RhdGUuYm91bmRSZWFkRkJPID09IG1f
c3RhdGUuYm91bmREcmF3RkJPKTsKICAgICBpZiAoYXR0cnMuYW50aWFsaWFzICYmIG1fc3RhdGUu
Ym91bmREcmF3RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IGIxNGI2MmQ1ZTRmYmVhOGVhMmM4Nzg1
NmU3YmZlZDZiOGQzODY3YjIuLjk4NGY2MmQwYjU0ZGQ4YThhZWEzOTdiMDgxNzdlYjhiNDZjOWZm
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcApA
QCAtMjAwLDcgKzIwMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZXBhcmVU
ZXh0dXJlKCkKICAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogCiAjaWYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAg
ICBUZW1wb3JhcnlPcGVuR0xTZXR0aW5nIHNjb3BlZFNjaXNzb3IoR0xfU0NJU1NPUl9URVNULCBH
TF9GQUxTRSk7CkBAIC0yMzksNyArMjQxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGkKICAg
ICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gZmFsc2U7CiAgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKCkuYW50aWFsaWFz
KSB7CkBAIC0yNzMsOSArMjc3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVh
ZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7
Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dEdMKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJyZW50
SGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKQEAgLTI4MywxMiArMjg0LDE0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAg
IGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7CiAKICAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwogICAgIG1fY3VycmVu
dEhlaWdodCA9IGhlaWdodDsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwogCiAgICAgVGVtcG9yYXJ5T3BlbkdMU2V0dGluZyBzY29wZWRTY2lz
c29yKEdMX1NDSVNTT1JfVEVTVCwgR0xfRkFMU0UpOwpAQCAtNDI3LDcgKzQzMCw5IEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybUdMT2JqZWN0
IHZlcnRleFNoYWRlciwgUGxhCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmFjdGl2
ZVRleHR1cmUoR0NHTGVudW0gdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBt
X3N0YXRlLmFjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZTsKICAgICA6OmdsQWN0aXZlVGV4dHVy
ZSh0ZXh0dXJlKTsKIH0KQEAgLTQzNiw3ICs0NDEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOjphdHRhY2hTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdM
TwogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBtX3NoYWRlclByb2dyYW1TeW1ib2xDb3VudE1hcC5yZW1vdmUocHJv
Z3JhbSk7CiAgICAgOjpnbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwogfQpAQCAtNDQ0
LDcgKzQ1MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmF0dGFjaFNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtR0xPCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBH
Q0dMdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIEFTU0VSVChwcm9ncmFt
KTsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5
bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CiAg
ICAgTE9HKFdlYkdMLCAiOjpiaW5kQXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAlcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKQEAgLTQ1Mywx
MyArNDYxLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRBdHRyaWJMb2Nh
dGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0x1CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRCdWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0
IGJ1ZmZlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRGcmFt
ZWJ1ZmZlcihHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIEdMdWludCBmYm87CiAgICAgaWYgKGJ1ZmZlcikKICAgICAg
ICAgZmJvID0gYnVmZmVyOwpAQCAtNDc1LDEwMiArNDg3LDEzMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpiaW5kRnJhbWVidWZmZXIoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJpbmRSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRl
cmJ1ZmZlcik7CiB9CiAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgbV9zdGF0ZS5zZXRCb3VuZFRleHR1cmUobV9zdGF0ZS5hY3RpdmVU
ZXh0dXJlVW5pdCwgdGV4dHVyZSwgdGFyZ2V0KTsKICAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0
LCB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRDb2xv
cihHQ0dMY2xhbXBmIHJlZCwgR0NHTGNsYW1wZiBncmVlbiwgR0NHTGNsYW1wZiBibHVlLCBHQ0dM
Y2xhbXBmIGFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6YmxlbmRFcXVhdGlvbihHQ0dMZW51bSBtb2RlKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xCbGVuZEVxdWF0aW9uKG1vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0NHTGVudW0gbW9kZVJHQiwgR0NHTGVu
dW0gbW9kZUFscGhhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xCbGVuZEVxdWF0
aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKIH0KIAogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpibGVuZEZ1bmMoR0NHTGVudW0gc2ZhY3RvciwgR0NHTGVudW0gZGZhY3Rv
cikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRm
YWN0b3IpOwogfSAgICAgICAKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6YmxlbmRG
dW5jU2VwYXJhdGUoR0NHTGVudW0gc3JjUkdCLCBHQ0dMZW51bSBkc3RSR0IsIEdDR0xlbnVtIHNy
Y0FscGhhLCBHQ0dMZW51bSBkc3RBbHBoYSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgR0NHTGVudW0gdXNhZ2UpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAwLCB1c2FnZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZlckRhdGEoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSwgR0NHTGVudW0gdXNhZ2Up
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCBkYXRhLCB1c2FnZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmJ1ZmZl
clN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIG9mZnNldCwgR0NHTHNpemVpcHRy
IHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpn
bEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwogfQogCiBHQ0dMZW51
bSBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQ0dMZW51
bSB0YXJnZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworCiAg
ICAgcmV0dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKHRhcmdldCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyQ29sb3IoR0NHTGNsYW1wZiByLCBHQ0dM
Y2xhbXBmIGcsIEdDR0xjbGFtcGYgYiwgR0NHTGNsYW1wZiBhKQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xDbGVhckNvbG9yKHIsIGcsIGIsIGEpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpjbGVhcihHQ0dMYml0ZmllbGQgbWFzaykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsQ2xlYXIobWFzayk7CiAgICAgY2hlY2tHUFVTdGF0dXMoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y2xlYXJTdGVuY2lsKEdDR0xpbnQgcykK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJTdGVuY2lsKHMpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb2xvck1hc2soR0NHTGJvb2xlYW4gcmVkLCBH
Q0dMYm9vbGVhbiBncmVlbiwgR0NHTGJvb2xlYW4gYmx1ZSwgR0NHTGJvb2xlYW4gYWxwaGEpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFk
ZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gVHVybiBvbiBuYW1lIG1hcHBpbmcuIER1ZSB0byB0aGUg
d2F5IEFOR0xFIG5hbWUgaGFzaGluZyB3b3Jrcywgd2UKICAgICAvLyBwb2ludCBhIGdsb2JhbCBo
YXNobWFwIHRvIHRoZSBtYXAgb3duZWQgYnkgdGhpcyBjb250ZXh0LgpAQCAtNjMyLDcgKzY3NSw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm1H
TE9iamVjdCBzaGFkZXIpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb21waWxlU2hh
ZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIEhhc2hNYXA8UGxhdGZvcm1HTE9iamVjdCwgU2hh
ZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CiAKQEAgLTY2Niw3ICs3MTAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb21waWxlU2hhZGVyRGlyZWN0KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5VGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQgbGV2ZWwsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMaW50IHgsIEdDR0xp
bnQgeSwgR0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlcikK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKIAogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CkBAIC02ODEsNyArNzI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6Y29weVRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0cKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y29weVRleFN1YkltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50IGxldmVsLCBHQ0dMaW50IHhvZmZzZXQsIEdDR0xpbnQgeW9mZnNldCwg
R0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIGF0dHJzID0gY29udGV4dEF0dHJpYnV0
ZXMoKTsKIAogICAgIEFTU0VSVChtX3N0YXRlLmJvdW5kUmVhZEZCTyA9PSBtX3N0YXRlLmJvdW5k
RHJhd0ZCTyk7CkBAIC02OTYsMTkgKzc0NCwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpjb3B5VGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQgbGV2ZWwsCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmN1bGxGYWNlKEdDR0xlbnVtIG1vZGUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEN1bGxGYWNlKG1vZGUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aEZ1bmMoR0NHTGVudW0gZnVuYykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZXB0aE1hc2soR0NHTGJvb2xlYW4gZmxhZykKIHsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsRGVwdGhNYXNrKGZsYWcpOwogfQogCkBAIC03MTYs
ODMgKzc3MCwxMDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGV0YWNoU2hhZGVy
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm1HTE8KIHsKICAgICBBU1NFUlQocHJv
Z3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9z
aGFkZXJQcm9ncmFtU3ltYm9sQ291bnRNYXAucmVtb3ZlKHByb2dyYW0pOwogICAgIDo6Z2xEZXRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6ZGlzYWJsZShHQ0dMZW51bSBjYXApCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbERpc2FibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkcmF3QXJyYXlzKEdDR0xlbnVtIG1vZGUsIEdDR0xp
bnQgZmlyc3QsIEdDR0xzaXplaSBjb3VudCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6
OmdsRHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNoZWNrR1BVU3RhdHVzKCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRyYXdFbGVtZW50cyhHQ0dMZW51
bSBtb2RlLCBHQ0dMc2l6ZWkgY291bnQsIEdDR0xlbnVtIHR5cGUsIEdDR0xpbnRwdHIgb2Zmc2V0
KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJy
ZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG9mZnNldCkpKTsKICAgICBjaGVja0dQVVN0YXR1cygpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjplbmFibGUoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xFbmFibGUoY2FwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0NHTHVpbnQgaW5kZXgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZmluaXNoKCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsRmluaXNoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmZsdXNoKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VD
b250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRmx1c2goKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBhdHRhY2htZW50LCBHQ0dMZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBh
dHRhY2htZW50LCBHQ0dMZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSwg
R0NHTGludCBsZXZlbCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1h
a2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG1fc3RhdGUuY3VycmVudEJv
dW5kVGV4dHVyZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZnJvbnRG
YWNlKEdDR0xlbnVtIG1vZGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEZyb250
RmFjZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2VuZXJhdGVN
aXBtYXAoR0NHTGVudW0gdGFyZ2V0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xH
ZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCkBAIC04MDIsNyArODgyLDkgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0QWN0aXZlQXR0cmliSW1wbChQbGF0Zm9ybUdMT2JqZWN0
IHByb2dyYW0sIEdDR0wKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgR0xpbnQgbWF4QXR0cmlidXRlU2l6ZSA9IDA7CiAgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRyaWJ1dGVTaXpl
KTsKICAgICBWZWN0b3I8R0xjaGFyPiBuYW1lKG1heEF0dHJpYnV0ZVNpemUpOyAvLyBHTF9BQ1RJ
VkVfQVRUUklCVVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbi4KQEAgLTg0
OCw3ICs5MzAsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRBY3RpdmVVbmlm
b3JtSW1wbChQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDRwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29u
dGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgR0xpbnQgbWF4VW5p
Zm9ybVNpemUgPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKIApAQCAtODk0LDcgKzk3OCw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9y
bUdMT2JqZWN0IHByb2dyYW0sIEdDR0xzCiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50LCBzaGFk
ZXJzKTsKIH0KIApAQCAtMTAzNyw3ICsxMTIzLDkgQEAgaW50IEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFMK
ICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
biAtMTsKKwogCiAgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dy
YW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUsIG5hbWUpOwogICAgIExPRyhXZWJHTCwg
Ijo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCku
ZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMTA0OSwxNCArMTEzNywxOCBA
QCBpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEF0dHJpYkxvY2F0aW9uRGlyZWN0KFBs
YXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgYwogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0
dXJuIC0xOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworCiAKICAgICByZXR1cm4gOjpnbEdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6Om1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBtb3ZlZEFuRXJyb3IgPSBmYWxz
ZTsKIAogICAgIC8vIFNldCBhbiBhcmJpdHJhcnkgbGltaXQgb2YgMTAwIGhlcmUgdG8gYXZvaWQg
Y3JlYXRpbmcgYSBoYW5nIGlmCkBAIC0xMDgzLDE5ICsxMTc1LDI1IEBAIEdDR0xlbnVtIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjpnZXRFcnJvcigpCiAgICAgICAgIHJldHVybiBtX3N5bnRoZXRp
Y0Vycm9ycy50YWtlRmlyc3QoKTsKICAgICB9CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJ
RF9PUEVSQVRJT047CisKICAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7CiB9CiAKIFN0cmluZyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U3RyaW5nKEdDR0xlbnVtIG5hbWUpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworCiAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKG5hbWUpKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmhpbnQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBtb2RlKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAK
QEAgLTExMDQsMTMgKzEyMDIsMTcgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmlzQnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisK
ICAgICByZXR1cm4gOjpnbElzQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIEdDR0xib29sZWFuIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjppc0VuYWJsZWQoR0NHTGVudW0gY2FwKQogewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsSXNFbmFibGVkKGNhcCk7CiB9CiAK
QEAgLTExMTksNyArMTIyMSw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
Ojppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJhbWVidWZmZXIpCiAgICAgaWYgKCFm
cmFtZWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IEdMX0ZBTFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKGZyYW1lYnVmZmVy
KTsKIH0KIApAQCAtMTEyOCw3ICsxMjMyLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmlzUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiAgICAgaWYgKCFw
cm9ncmFtKQogICAgICAgICByZXR1cm4gR0xfRkFMU0U7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gR0xf
RkFMU0U7CisKICAgICByZXR1cm4gOjpnbElzUHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTEz
Nyw3ICsxMjQzLDkgQEAgR0NHTGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmlzUmVu
ZGVyYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmUKICAgICBpZiAoIXJlbmRlcmJ1
ZmZlcikKICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIEdMX0ZB
TFNFOworCiAgICAgcmV0dXJuIDo6Z2xJc1JlbmRlcmJ1ZmZlckVYVChyZW5kZXJidWZmZXIpOwog
fQogCkBAIC0xMTQ2LDcgKzEyNTQsOSBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiAgICAgaWYgKCFzaGFkZXIp
CiAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsK
KwogICAgIHJldHVybiA6OmdsSXNTaGFkZXIoc2hhZGVyKTsKIH0KIApAQCAtMTE1NSwyMCArMTI2
NSwyNiBAQCBHQ0dMYm9vbGVhbiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6aXNUZXh0dXJlKFBs
YXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6
OmdsSXNUZXh0dXJlKHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpsaW5lV2lkdGgoR0NHTGZsb2F0IHdpZHRoKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xMaW5lV2lkdGgod2lkdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
OjpsaW5rUHJvZ3JhbShQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0pCiB7CiAgICAgQVNTRVJUKHBy
b2dyYW0pOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRD
dXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgR0NHTHNpemVpIGNvdW50ID0gMDsK
ICAgICBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcnNbMl0gPSB7IH07CkBAIC0xMTgyLDI1ICsxMjk4
LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmxpbmtQcm9ncmFtKFBsYXRmb3Jt
R0xPYmplY3QgcHJvZ3JhbSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGl4ZWxT
dG9yZWkoR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgcGFyYW0pCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnBvbHlnb25PZmZzZXQoR0NHTGZsb2F0IGZhY3RvciwgR0NHTGZs
b2F0IHVuaXRzKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xQb2x5Z29uT2Zmc2V0
KGZhY3RvciwgdW5pdHMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzYW1w
bGVDb3ZlcmFnZShHQ0dMY2xhbXBmIHZhbHVlLCBHQ0dMYm9vbGVhbiBpbnZlcnQpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpzY2lzc29yKEdDR0xpbnQgeCwgR0NH
TGludCB5LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAg
LTEyMDgsNyArMTMzMiw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnNoYWRlclNv
dXJjZShQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nCiB7CiAgICAgQVNTRVJU
KHNoYWRlcik7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKIAogICAgIFNoYWRlclNvdXJjZUVudHJ5
IGVudHJ5OwogCkBAIC0xMjE5LDE3OCArMTM0NSwyMzQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRH
TE9wZW5HTDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJp
bmcKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbEZ1bmMoR0NHTGVudW0g
ZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0NHTGVudW0gZmFjZSwgR0NH
TGVudW0gZnVuYywgR0NHTGludCByZWYsIEdDR0x1aW50IG1hc2spCiB7Ci0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNr
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE1hc2soR0NHTHVp
bnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3RlbmNpbE1hc2sobWFz
ayk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0NHTGVudW0gZmFjZSwgR0NHTHVpbnQgbWFzaykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6c3RlbmNpbE9wKEdDR0xlbnVtIGZhaWwsIEdDR0xlbnVtIHpm
YWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsU3Rl
bmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDR0xlbnVtIGZhY2UsIEdDR0xlbnVtIGZhaWwsIEdD
R0xlbnVtIHpmYWlsLCBHQ0dMZW51bSB6cGFzcykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dGV4UGFyYW1ldGVyZihHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxvYXQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgOjpnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhQYXJhbWV0ZXJpKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQgdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWYobG9j
YXRpb24sIHYwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTFm
dihHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJh
eSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTFmdihsb2NhdGlvbiwg
c2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3Jt
MmYoR0NHTGludCBsb2NhdGlvbiwgR0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEpCiB7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYxKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTJmdihHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBG
SVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMi4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICA6OmdsVW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2YoR0NHTGludCBsb2NhdGlvbiwg
R0NHTGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MikKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTNmKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTNmdihHQ0dMaW50IGxvY2F0aW9u
LCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVW5pZm9ybTNmdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGYoR0NHTGludCBsb2NhdGlvbiwgR0NH
TGZsb2F0IHYwLCBHQ0dMZmxvYXQgdjEsIEdDR0xmbG9hdCB2MiwgR0NHTGZsb2F0IHYzKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtNGYobG9jYXRpb24sIHYwLCB2MSwg
djIsIHYzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5pZm9ybTRmdihH
Q0dMaW50IGxvY2F0aW9uLCBHQ0dMc2l6ZWkgc2l6ZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtMWkoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTGludCB2MCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VW5pZm9ybTFpKGxvY2F0aW9uLCB2MCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0xaXYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdD
R0xpbnQqIGFycmF5KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFr
ZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMWl2
KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OnVuaWZvcm0yaShHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMmkobG9jYXRpb24sIHYwLCB2
MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0yaXYoR0NHTGlu
dCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyLgotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIDo6Z2xVbmlmb3JtMml2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm0zaShHQ0dMaW50IGxvY2F0
aW9uLCBHQ0dMaW50IHYwLCBHQ0dMaW50IHYxLCBHQ0dMaW50IHYyKQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtM2l2KEdDR0xpbnQgbG9jYXRpb24s
IEdDR0xzaXplaSBzaXplLCBjb25zdCBHQ0dMaW50KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMy4KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsVW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwgYXJyYXkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1bmlmb3JtNGkoR0NHTGludCBsb2NhdGlvbiwgR0NHTGlu
dCB2MCwgR0NHTGludCB2MSwgR0NHTGludCB2MiwgR0NHTGludCB2MykKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm00aXYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHNpemVpIHNpemUsIGNvbnN0IEdDR0xpbnQqIGFycmF5KQogewogICAgIC8vIEZJ
WE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgyZnYoR0NHTGludCBsb2Nh
dGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZs
b2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgNC4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0
Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDJmdihs
b2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnVuaWZvcm1NYXRyaXgzZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVp
IHNpemUsIEdDR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsK
ICAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOS4KLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICA6OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnVu
aWZvcm1NYXRyaXg0ZnYoR0NHTGludCBsb2NhdGlvbiwgR0NHTHNpemVpIHNpemUsIEdDR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKICAgICAvLyBGSVhNRTog
bGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYuCi0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp1c2VQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBp
ZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVXNl
UHJvZ3JhbShwcm9ncmFtKTsKIH0KIApAQCAtMTM5OCw3MyArMTU4MCw5NyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9n
cmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IDo6Z2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjApCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjFmdihHQ0dM
dWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmKEdDR0x1aW50IGluZGV4LCBHQ0dM
ZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
VmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjJmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0
KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliMmZ2
KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYjNmKEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NH
TGZsb2F0IHYyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xWZXJ0ZXhBdHRyaWIz
ZihpbmRleCwgdjAsIHYxLCB2Mik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6
OnZlcnRleEF0dHJpYjNmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0KiBhcnJheSkK
IHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVu
dCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliM2Z2KGluZGV4LCBh
cnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRm
KEdDR0x1aW50IGluZGV4LCBHQ0dMZmxvYXQgdjAsIEdDR0xmbG9hdCB2MSwgR0NHTGZsb2F0IHYy
LCBHQ0dMZmxvYXQgdjMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFt
YWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0
dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OnZlcnRleEF0dHJpYjRmdihHQ0dMdWludCBpbmRleCwgY29uc3QgR0NHTGZsb2F0
KiBhcnJheSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsVmVydGV4QXR0cmliNGZ2
KGluZGV4LCBhcnJheSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnZlcnRl
eEF0dHJpYlBvaW50ZXIoR0NHTHVpbnQgaW5kZXgsIEdDR0xpbnQgc2l6ZSwgR0NHTGVudW0gdHlw
ZSwgR0NHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0NHTHNpemVpIHN0cmlkZSwgR0NHTGludHB0ciBv
ZmZzZXQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50
ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjp2aWV3cG9ydChHQ0dMaW50IHgsIEdDR0xpbnQgeSwgR0NH
THNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogUGxhdGZvcm1HTE9i
amVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlVmVydGV4QXJyYXkoKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOworCiAgICAgR0x1aW50IGFycmF5ID0gMDsKICNpZiAoIVVTRShPUEVO
R0xfRVMpICYmIChQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShD
T0NPQSkKICAgICA6OmdsR2VuVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CkBAIC0xNDc3LDcgKzE2
ODMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpkZWxldGVWZXJ0ZXhBcnJheShQ
bGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICNpZiAoIVVTRShPUEVOR0xfRVMpICYmIChQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpKSB8fCBQTEFURk9STShDT0NPQSkKICAgICA6Omds
RGVsZXRlVmVydGV4QXJyYXlzKDEsICZhcnJheSk7CiAjZW5kaWYKQEAgLTE0ODgsNyArMTY5Niw5
IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjppc1ZlcnRleEFycmF5KFBs
YXRmb3JtR0xPYmplY3QgYXJyYXkpCiAgICAgaWYgKCFhcnJheSkKICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwogICAgIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogI2lmICghVVNFKE9Q
RU5HTF9FUykgJiYgKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JN
KENPQ09BKQogICAgIHJldHVybiA6OmdsSXNWZXJ0ZXhBcnJheShhcnJheSk7CiAjZW5kaWYKQEAg
LTE0OTcsNyArMTcwNyw5IEBAIEdDR0xib29sZWFuIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpp
c1ZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJyYXkpCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheShQbGF0Zm9ybUdMT2JqZWN0IGFycmF5KQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogI2lmICghVVNFKE9QRU5HTF9FUykgJiYgKFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oV0lOKSkpIHx8IFBMQVRGT1JNKENPQ09BKQogICAgIDo6Z2xCaW5kVmVy
dGV4QXJyYXkoYXJyYXkpOwogI2Vsc2UKQEAgLTE1MDcsMTkgKzE3MTksMjUgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6YmluZFZlcnRleEFycmF5KFBsYXRmb3JtR0xPYmplY3QgYXJy
YXkpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEJvb2xlYW52KEdDR0xlbnVt
IHBuYW1lLCBHQ0dMYm9vbGVhbiogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
OjpnbEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0g
cG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xH
ZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEZsb2F0dihHQ0dMZW51bSBwbmFtZSwgR0NHTGZsb2F0
KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsR2V0RmxvYXR2KHBuYW1l
LCB2YWx1ZSk7CiB9CiAKQEAgLTE1MjcsNyArMTc0NSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBH
Q0dMCiB7CiAgICAgVU5VU0VEX1BBUkFNKHBuYW1lKTsKICAgICBVTlVTRURfUEFSQU0oaW5kZXgp
OwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybjsKKwogICAgICp2YWx1ZSA9IDA7CiAgICAgLy8gRklYTUUgMTQx
MTc4OiBCZWZvcmUgZW5hYmxpbmcgdGhpcyB3ZSBtdXN0IGZpcnN0IHN3aXRjaCBvdmVyIHRvIHVz
aW5nIGdsMy5oIGFuZCBjcmVhdGluZyBhbmQgaW5pdGlhbGluZyB0aGUgV2ViR0wyIGNvbnRleHQg
dXNpbmcgT3BlbkdMIEVTIDMuMC4KICAgICAvLyA6OmdsR2V0SW50ZWdlcmlfdihwbmFtZSwgaW5k
ZXgsIHZhbHVlKTsKQEAgLTE1MzYsNyArMTc1Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldEludGVnZXJpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQ0dM
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRlZ2VyNjR2KEdDR0xlbnVtIHBu
YW1lLCBHQ0dMaW50NjQqIHZhbHVlKQogewogICAgIFVOVVNFRF9QQVJBTShwbmFtZSk7Ci0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgKnZhbHVlID0gMDsKICAgICAvLyBGSVhNRSAxNDExNzg6IEJl
Zm9yZSBlbmFibGluZyB0aGlzIHdlIG11c3QgZmlyc3Qgc3dpdGNoIG92ZXIgdG8gdXNpbmcgZ2wz
LmggYW5kIGNyZWF0aW5nIGFuZCBpbml0aWFsaW5nIHRoZSBXZWJHTDIgY29udGV4dCB1c2luZyBP
cGVuR0wgRVMgMy4wLgogICAgIC8vIDo6Z2xHZXRJbnRlZ2VyNjR2KHBuYW1lLCB2YWx1ZSk7CkBA
IC0xNTQ2LDcgKzE3NjgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRJbnRl
Z2VyNjRpX3YoR0NHTGVudW0gcG5hbWUsIEdDR0x1aW50IGluZGV4LCBHQwogewogICAgIFVOVVNF
RF9QQVJBTShwbmFtZSk7CiAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICAqdmFsdWUgPSAwOwogICAgIC8vIEZJWE1FIDE0MTE3ODogQmVmb3JlIGVuYWJs
aW5nIHRoaXMgd2UgbXVzdCBmaXJzdCBzd2l0Y2ggb3ZlciB0byB1c2luZyBnbDMuaCBhbmQgY3Jl
YXRpbmcgYW5kIGluaXRpYWxpbmcgdGhlIFdlYkdMMiBjb250ZXh0IHVzaW5nIE9wZW5HTCBFUyAz
LjAuCiAgICAgLy8gOjpnbEdldEludGVnZXI2NGlfdihwbmFtZSwgaW5kZXgsIHZhbHVlKTsKQEAg
LTE1NTQsNyArMTc3OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXI2NGlfdihHQ0dMZW51bSBwbmFtZSwgR0NHTHVpbnQgaW5kZXgsIEdDCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdD
R0xlbnVtIHRhcmdldCwgR0NHTGVudW0gYXR0YWNobWVudCwgR0NHTGVudW0gcG5hbWUsIEdDR0xp
bnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhdHRhY2htZW50ID09
IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCkKICAgICAgICAgYXR0YWNobWVudCA9IERFUFRIX0FU
VEFDSE1FTlQ7IC8vIE9yIFNURU5DSUxfQVRUQUNITUVOVCwgZWl0aGVyIHdvcmtzLgogICAgIDo6
Z2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0dGFjaG1l
bnQsIHBuYW1lLCB2YWx1ZSk7CkBAIC0xNTYyLDcgKzE3ODgsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQ0dMZW51
bSB0YXJnZQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRQcm9ncmFtaXYoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBHQ0dMZW51bSBwbmFtZSwgR0NHTGludCogdmFsdWUpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFt
ZSwgdmFsdWUpOwogfQogCkBAIC0xNTcyLDcgKzE4MDAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm1HTE9iamVj
dCBwcgogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGNvbnN0IGF1dG8mIHJlc3VsdCA9IG1fc2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50
TWFwLmZpbmQocHJvZ3JhbSk7CiAgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclByb2dyYW1TeW1i
b2xDb3VudE1hcC5lbmQoKSkgewogICAgICAgICAqdmFsdWUgPSByZXN1bHQtPnZhbHVlLmNvdW50
Rm9yVHlwZShwbmFtZSk7CkBAIC0xNjUwLDcgKzE4ODAsOSBAQCBTdHJpbmcgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkK
IHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisK
ICAgICBHTGludCBsZW5ndGggPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKICAgICBpZiAoIWxlbmd0aCkKQEAgLTE2NjksNyAr
MTkwMSw5IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0UHJvZ3JhbUluZm9M
b2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVt
IHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6Omds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQog
CkBAIC0xNjc3LDcgKzE5MTEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlciwgR0NHTGVudW0gcG5hbQogewogICAgIEFT
U0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtl
Q29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAKICAgICBjb25zdCBhdXRvJiBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCkBAIC0xNzEyLDcg
KzE5NDgsOCBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlckluZm9M
b2coUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBjb25zdCBhdXRvJiByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkKQEAgLTE3MzksNyArMTk3Niw4IEBAIFN0cmluZyBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewog
ICAgIEFTU0VSVChzaGFkZXIpOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAg
Y29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAg
IGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCkBAIC0xNzUwLDI1ICsxOTg4
LDMzIEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Z2V0U2hhZGVyU291cmNlKFBs
YXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpn
ZXRUZXhQYXJhbWV0ZXJmdihHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIHBuYW1lLCBHQ0dMZmxv
YXQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNv
bnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQYXJhbWV0
ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmdldFRleFBhcmFtZXRlcml2KEdDR0xlbnVtIHRhcmdldCwgR0NHTGVudW0gcG5hbWUs
IEdDR0xpbnQqIHZhbHVlKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRUZXhQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIEdDR0xp
bnQgbG9jYXRpb24sIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbEdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm1HTE9iamVjdCBw
cm9ncmFtLCBHQ0dMaW50IGxvY2F0aW9uLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICA6OmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7
CiB9CiAKQEAgLTE3ODMsNyArMjAyOSw4IEBAIEdDR0xpbnQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvCiB7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgU3RyaW5n
IG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQ
RV9VTklGT1JNLCBuYW1lKTsKICAgICBMT0coV2ViR0wsICI6OmdldFVuaWZvcm1Mb2NhdGlvbiBp
cyBtYXBwaW5nICVzIHRvICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0Zjgo
KS5kYXRhKCkpOwpAQCAtMTc5MiwxOSArMjAzOSwyNCBAQCBHQ0dMaW50IEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtLCBj
bwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJmdihHQ0dM
dWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFs
dWUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRWZXJ0ZXhBdHRyaWJp
dihHQ0dMdWludCBpbmRleCwgR0NHTGVudW0gcG5hbWUsIEdDR0xpbnQqIHZhbHVlKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUs
IHZhbHVlKTsKIH0KIAogR0NHTHNpemVpcHRyIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoR0NHTHVpbnQgaW5kZXgsIEdDR0xlbnVtIHBuYW1lKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybiAwOwogCiAgICAgR0x2b2lkKiBwb2ludGVyID0gMDsKICAgICA6OmdsR2V0
VmVydGV4QXR0cmliUG9pbnRlcnYoaW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7CkBAIC0xODEzLDcg
KzIwNjUsOCBAQCBHQ0dMc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFZlcnRl
eEF0dHJpYk9mZnNldChHQ0dMdWludCBpbmRleCwgR0NHTAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dEdMT3BlbkdMOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwg
R0NHTGludCB4b2ZmLCBHQ0dMaW50IHlvZmYsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhl
aWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
CiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJl
bnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAjaWYgIVVTRShPUEVOR0xfRVMpCiAgICAgaWYgKHR5
cGUgPT0gSEFMRl9GTE9BVF9PRVMpCkBAIC0xODQ0LDIxICsyMDk3LDI3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50
IGxldmVsLCBHQ0dMCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGludCBib3Jk
ZXIsIEdDR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbENvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CiAg
ICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1cnJlbnRCb3VuZFRleHR1
cmUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludCBsZXZlbCwgR0NHTGludCB4b2Zmc2V0
LCBHQ0dMaW50IHlvZmZzZXQsIEdDR0xzaXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NH
TGVudW0gZm9ybWF0LCBHQ0dMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdl
U2l6ZSwgZGF0YSk7CiAgICAgbV9zdGF0ZS50ZXh0dXJlU2VlZENvdW50LmFkZChtX3N0YXRlLmN1
cnJlbnRCb3VuZFRleHR1cmUoKSk7CiB9CiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5CdWZmZXJzKDEsICZvKTsKICAgICByZXR1cm4gbzsK
QEAgLTE4NjYsNyArMjEyNSw5IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OmNyZWF0ZUJ1ZmZlcigpCiAKIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm4gMDsKKwog
ICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7CiAgICAg
cmV0dXJuIG87CkBAIC0xODc0LDEzICsyMTM1LDE3IEBAIFBsYXRmb3JtR0xPYmplY3QgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVj
dCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUHJvZ3JhbSgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKICAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7CiB9CiAKIFBsYXRmb3Jt
R0xPYmplY3QgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBHTHVpbnQgbyA9IDA7CiAgICAgZ2xHZW5SZW5k
ZXJidWZmZXJzRVhUKDEsICZvKTsKICAgICByZXR1cm4gbzsKQEAgLTE4ODgsMTMgKzIxNTMsMTcg
QEAgUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3JlYXRlUmVuZGVy
YnVmZmVyKCkKIAogUGxhdGZvcm1HTE9iamVjdCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6Y3Jl
YXRlU2hhZGVyKEdDR0xlbnVtIHR5cGUpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBy
ZXR1cm4gZ2xDcmVhdGVTaGFkZXIoKHR5cGUgPT0gRlJBR01FTlRfU0hBREVSKSA/IEdMX0ZSQUdN
RU5UX1NIQURFUiA6IEdMX1ZFUlRFWF9TSEFERVIpOwogfQogCiBQbGF0Zm9ybUdMT2JqZWN0IEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJlKCkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm4gMDsKKwogICAgIEdMdWludCBvID0gMDsKICAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKICAg
ICBtX3N0YXRlLnRleHR1cmVTZWVkQ291bnQuYWRkKG8pOwpAQCAtMTkwMywxMyArMjE3MiwxNyBA
QCBQbGF0Zm9ybUdMT2JqZWN0IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjcmVhdGVUZXh0dXJl
KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVsZXRlQnVmZmVyKFBsYXRmb3Jt
R0xPYmplY3QgYnVmZmVyKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGdsRGVsZXRlQnVm
ZmVycygxLCAmYnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6ZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm1HTE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBBU1NFUlQobV9zdGF0ZS5ib3VuZFJlYWRGQk8gPT0gbV9zdGF0ZS5i
b3VuZERyYXdGQk8pOwogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX3N0YXRlLmJvdW5kRHJhd0ZC
TykgewogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBnb2luZyB0
byBiZSB1c2VkIGZvciBkcmF3aW5nCkBAIC0xOTIxLDI2ICsyMTk0LDM0IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtR0xPYmplY3QgZnJh
bWVidWZmZXIpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVByb2dyYW0o
UGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1f
c2hhZGVyUHJvZ3JhbVN5bWJvbENvdW50TWFwLnJlbW92ZShwcm9ncmFtKTsKICAgICBnbERlbGV0
ZVByb2dyYW0ocHJvZ3JhbSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsKLSAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAg
ICAgICByZXR1cm47CisKICAgICBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJnJlbmRlcmJ1
ZmZlcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmRlbGV0ZVNoYWRlcihQ
bGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBnbERl
bGV0ZVNoYWRlcihzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpk
ZWxldGVUZXh0dXJlKFBsYXRmb3JtR0xPYmplY3QgdGV4dHVyZSkKIHsKLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBtX3N0YXRlLmJvdW5kVGV4dHVyZU1hcC5yZW1vdmVJZihbdGV4dHVyZV0gKGF1
dG8mIGtleVZhbHVlKSB7CiAgICAgICAgIHJldHVybiBrZXlWYWx1ZS52YWx1ZS5maXJzdCA9PSB0
ZXh0dXJlOwogICAgIH0pOwpAQCAtMTk5Niw3ICsyMjc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6ZGlzcGF0Y2hDb250ZXh0Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OnRleEltYWdlMkREaXJlY3QoR0NHTGVudW0gdGFyZ2V0
LCBHQ0dMaW50IGxldmVsLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVpIHdpZHRo
LCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMaW50IGJvcmRlciwgR0NHTGVudW0gZm9ybWF0LCBHQ0dM
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogICAgIG1fc3RhdGUudGV4dHVy
ZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQpAQCAtMjAy
MSw3ICsyMzA0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dmVydGV4QXR0cmli
RGl2aXNvcihHQ0dMdWludCBpbmRleCwgR0NHTHVpbnQgZGl2aXMKICNpZiBIQVZFKE9QRU5HTF80
KSAmJiBFTkFCTEUoV0VCR0wyKQogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cHJpbWl0
aXZlUmVzdGFydEluZGV4KEdDR0x1aW50IGluZGV4KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwog
ICAgIDo6Z2xQcmltaXRpdmVSZXN0YXJ0SW5kZXgoaW5kZXgpOwogfQogI2VuZGlmCkBAIC0yMDQ3
LDcgKzIzMzIsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpidWZmZXJTdWJEYXRh
KEdDR0xlbnVtIHRhcmdldCwgR0NHTGludHB0ciBkc3RCeXRlTwogI2lmIEhBVkUoT1BFTkdMXzQp
IHx8IEhBVkUoT1BFTkdMX0VTXzMpCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpjb3B5
QnVmZmVyU3ViRGF0YShHQ0dMZW51bSByZWFkVGFyZ2V0LCBHQ0dMZW51bSB3cml0ZVRhcmdldCwg
R0NHTGludHB0ciByZWFkT2Zmc2V0LCBHQ0dMaW50cHRyIHdyaXRlT2Zmc2V0LCBHQ0dMc2l6ZWlw
dHIgc2l6ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250
ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ29weUJ1ZmZlclN1YkRh
dGEocmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXpl
KTsKIH0KICNlbHNlCkBAIC0yMDY4LDEzICsyMzU1LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w6OmdldEJ1ZmZlclN1YkRhdGEoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50cHRyIHNy
Y0J5CiAjaWYgSEFWRShPUEVOR0xfNCkgfHwgSEFWRShPUEVOR0xfRVNfMykKIHZvaWQqIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOjptYXBCdWZmZXJSYW5nZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xp
bnRwdHIgb2Zmc2V0LCBHQ0dMc2l6ZWlwdHIgbGVuZ3RoLCBHQ0dMYml0ZmllbGQgYWNjZXNzKQog
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgcmV0dXJuIDo6Z2xNYXBCdWZmZXJS
YW5nZSh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwogfQogCiBHQ0dMYm9vbGVhbiBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDo6dW5tYXBCdWZmZXIoR0NHTGVudW0gdGFyZ2V0KQogewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkp
CisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKwogICAgIHJldHVybiA6OmdsVW5tYXBCdWZmZXIo
dGFyZ2V0KTsKIH0KICNlbHNlCkBAIC0yMTM5LDcgKzI0MzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMOjpyZWFkQnVmZmVyKEdDR0xlbnVtIHNyYykKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OmdldEludGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0NHTGVudW0gcG5hbWUsIEdDR0xzaXplaSBidWZTaXplLCBHQ0dM
aW50KiBwYXJhbXMpCiB7CiAjaWYgVVNFKE9QRU5HTF9FUykKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICA6OmdsR2V0SW50ZXJuYWxmb3JtYXRpdih0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CkBA
IC0yMTUyLDIwICsyNDQ1LDI2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldElu
dGVybmFsZm9ybWF0aXYoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMZW51bSBpbnRlCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHQ0dM
ZW51bSB0YXJnZXQsIEdDR0xzaXplaSBzYW1wbGVzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0NHTHNpemVpIHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnRleFN0b3JhZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xzaXplaSBsZXZl
bHMsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBHQ0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBo
ZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UyRCh0YXJn
ZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIG1fc3RhdGUu
dGV4dHVyZVNlZWRDb3VudC5hZGQobV9zdGF0ZS5jdXJyZW50Qm91bmRUZXh0dXJlKCkpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp0ZXhTdG9yYWdlM0QoR0NHTGVudW0gdGFy
Z2V0LCBHQ0dMc2l6ZWkgbGV2ZWxzLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0NHTHNpemVp
IHdpZHRoLCBHQ0dMc2l6ZWkgaGVpZ2h0LCBHQ0dMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgOjpnbFRleFN0b3JhZ2UzRCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKICAgICBtX3N0YXRlLnRleHR1cmVTZWVkQ291
bnQuYWRkKG1fc3RhdGUuY3VycmVudEJvdW5kVGV4dHVyZSgpKTsKIH0KQEAgLTI2MzAsNyArMjky
OSw4IEBAIFZlY3RvcjxHQ0dMdWludD4gR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFVuaWZv
cm1JbmRpY2VzKFBsYXRmb3JtR0xPYmplY3QgcHJvCiB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOjpnZXRBY3RpdmVVbmlmb3JtcyhQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFZl
Y3RvcjxHQ0dMdWludD4mIHVuaWZvcm1JbmRpY2VzLCBHQ0dMZW51bSBwbmFtZSwgVmVjdG9yPEdD
R0xpbnQ+JiBwYXJhbXMpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVy
bjsKIAogICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3Jtc2l2KHByb2dyYW0sIHVuaWZvcm1JbmRpY2Vz
LnNpemUoKSwgdW5pZm9ybUluZGljZXMuZGF0YSgpLCBwbmFtZSwgcGFyYW1zLmRhdGEoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xFUy5jcHAKaW5kZXggOTM4OTVlNTZi
MGM1YTViZDg0Y2IwYWE0OTg2ODIwYWE2NzExNDgxNS4uNjBmZGZjNjVmODczOTU4OTU3OTVhODRl
ZjFlMDlhYmY2ZDdhYTg0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTEVT
LmNwcApAQCAtNDIsNyArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0w6OnJlYWRQaXhlbHMoR0NHTGludCB4LCBHQ0dMaW50IHksIEdDR0xz
aXplaSB3aWR0aCwgR0NHTHNpemVpIGhlaWdodCwgR0NHTGVudW0gZm9ybWF0LCBHQ0dMZW51bSB0
eXBlLCB2b2lkKiBkYXRhKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogCiAgICAgYXV0byBhdHRy
aWJ1dGVzID0gY29udGV4dEF0dHJpYnV0ZXMoKTsKIApAQCAtMTg4LDEzICsxOTAsMTcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShjb25zdCBJbnRSZWN0JikKIAogdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQ0dMZW51bSB0YXJnZXQsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
Q0dMc2l6ZWkgd2lkdGgsIEdDR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldEludGVn
ZXJ2KEdDR0xlbnVtIHBuYW1lLCBHQ0dMaW50KiB2YWx1ZSkKIHsKLSAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3VycmVudCgpKQorICAgICAgICByZXR1cm47
CisKICAgICA6OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKIH0KIApAQCAtMjAzLDcgKzIw
OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHQ0dMZW51bSBzaGFkZXJUeXBlLCBHQ0dMCiAgICAgQVNTRVJUKHJhbmdlKTsKICAgICBB
U1NFUlQocHJlY2lzaW9uKTsKIAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICgh
bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xHZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsIHByZWNp
c2lvbik7CiB9CiAKQEAgLTIzMiwxMyArMjQwLDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w6OnZhbGlkYXRlQXR0cmlidXRlcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0w6OmRlcHRoUmFuZ2UoR0NHTGNsYW1wZiB6TmVhciwgR0NHTGNsYW1wZiB6RmFyKQogewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIDo6Z2xEZXB0aFJhbmdlZih6TmVhciwgekZhcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OmNsZWFyRGVwdGgoR0NHTGNsYW1wZiBkZXB0
aCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoIW1ha2VDb250ZXh0Q3Vy
cmVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwog
fQogCkBAIC0yNzgsNyArMjkwLDkgQEAgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcyBhdHQKICAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMUHJpdmF0ZT4odGhpcywg
ZGVzdGluYXRpb24pKQogewogICAgIEFTU0VSVF9VTlVTRUQoc2hhcmVkQ29udGV4dCwgIXNoYXJl
ZENvbnRleHQpOwotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmICghbWFrZUNvbnRl
eHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIAogICAgIHZhbGlkYXRlQXR0cmli
dXRlcygpOwogICAgIGF0dHJpYnV0ZXMgPSBjb250ZXh0QXR0cmlidXRlcygpOyAvLyBUaGV5IG1h
eSBoYXZlIGNoYW5nZWQgZHVyaW5nIHZhbGlkYXRpb24uCkBAIC0zNDMsNyArMzU3LDkgQEAgR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMKEdyYXBoaWNzQ29u
dGV4dEdMQXR0cmlidXRlcyBhdHQKIAogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w6On5HcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCgpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KCFtYWtlQ29udGV4dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgOjpnbERlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udGV4
dEF0dHJpYnV0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9HcmFwaGljc0NvbnRleHRHTFRleHR1cmVNYXBwZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1h
cHBlci5jcHAKaW5kZXggYzBhMmVjYjg3NDdjMTE4ZjA3MDVkZjkxODk4ZDQ0OTgyZTkwZjJhNy4u
ODlkMTRkMjk1NmI3MmZhNDJlZTk4MzYyYWI4MGQyYmIzMGFiM2VkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4
dHVyZU1hcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzQ29udGV4dEdMVGV4dHVyZU1hcHBlci5jcHAKQEAgLTEzOSw3ICsxMzksOCBA
QCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhp
Y3NDb250ZXh0R0xBdHRyaWJ1dGVzIGF0dAogI2Vsc2UKICAgICBtX3RleG1hcExheWVyID0gV1RG
OjptYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJHQ0dMUGxhdGZvcm1MYXllcj4oKnRoaXMsIGRlc3Rp
bmF0aW9uKTsKICNlbmRpZgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGJvb2wgc3Vj
Y2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywg
c3VjY2Vzcyk7CiAKICAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKICAgICBhdHRyaWJ1dGVzID0g
Y29udGV4dEF0dHJpYnV0ZXMoKTsgLy8gVGhleSBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyB2YWxp
ZGF0aW9uLgpAQCAtMjEzLDcgKzIxNCw4IEBAIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpHcmFw
aGljc0NvbnRleHRHTE9wZW5HTChHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMgYXR0CiAgICAg
bV90ZXhtYXBMYXllciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlckdDR0xQbGF0Zm9ybUxheWVy
PigqdGhpcywgZGVzdGluYXRpb24pOwogI2VuZGlmCiAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwogCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAg
ICAgYXR0cmlidXRlcyA9IGNvbnRleHRBdHRyaWJ1dGVzKCk7IC8vIFRoZXkgbWF5IGhhdmUgY2hh
bmdlZCBkdXJpbmcgdmFsaWRhdGlvbi4KQEAgLTMzMyw3ICszMzUsOCBAQCBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTDo6R3JhcGhpY3NDb250ZXh0R0xPcGVuR0woR3JhcGhpY3NDb250ZXh0R0xBdHRy
aWJ1dGVzIGF0dAogI2lmIFVTRShBTkdMRSkKIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjp+R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0woKQogewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2Vzcyk7CiAgICAgaWYgKG1fdGV4dHVyZSkKICAgICAgICAgZ2w6OkRlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
QEAgLTM3Nyw3ICszODAsOCBAQCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMKCkKICNlbHNlCiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6fkdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMKCkKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBib29s
IHN1Y2Nlc3MgPSBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOwogICAgIGlmIChtX3RleHR1cmUpCiAgICAgICAgIDo6Z2xEZWxldGVUZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>